這個作業屬於哪個課程
這個作業要求在**
/homework/11232
這個作業的目標
《掌握線性表與鍊錶基本概念及其運算,並用c語言表現》
學號2018204093
一、實驗目的
1、掌握線性表中元素的前驅、後續的概念。
2、掌握順序表與鍊錶的建立、插入元素、刪除表中某元素的演算法。
3、對線性表相應演算法的時間複雜度進行分析。
4、理解順序表、鍊錶資料結構的特點(優缺點)。
二、實驗預習
1、線性表:是由n個資料元素組成的有限序列。
2、順序表:
把線性表的結點按邏輯次序依次存放在一組位址連續的儲存單元裡。
3、鍊錶:
用一組任意的儲存單元來存放線性表的結點。
執行結果#include#include#define error 0
#define ok 1
#define init_size 5 /*初始分配的順序表長度*/
#define increm 5 /*溢位時,順序表長度的增量*/
typedef int elemtype; /*定義表元素的型別*/
typedef struct sqlistsqlist;
int initlist_sq(sqlist l); / 初始化順序表,為其分配儲存空間 /
int createlist_sq(sqlist l,int n); / 建立乙個順序表 /
int listinsert_sq(sqlist l,int i,elemtype e);/ 將新元素e插入到順序表第i個位置 /
int printlist_sq(sqlist l); /輸出順序表的元素/
int listdelete_sq(sqlist l,int i); /刪除第i個元素/
int listlocate(sqlist l,elemtype e); /查詢值為e的元素/
int initlist_sq(sqlist l)/initlist*/
int createlist_sq(sqlist l,int n)/printlist*/
int listinsert_sq(sqlist l,int i,elemtype e)
for(k=l->length-1;k>=i-1;k--)
l->slist[i-1]=e;
l->length++;
return ok;
}/listinsert*/
/在順序表中刪除第i個元素/
int listdelete_sq(sqlist *l,int i)
/在順序表中查詢指定值元素,返回其序號/
int listlocate(sqlist *l,elemtype e)
else
printf("error");
return 0;
}
演算法分析
在主函式中呼叫initlist_sq()對函式進行初始化,用initlist_sq()建立順序表,呼叫printlist_sq()函式輸出該順序表中元素的值,然後呼叫listinsert_sq()函式插入,並輸出插入新元素後的表。
2、為第1題補充刪除和查詢功能函式,並在主函式中補充**驗證演算法的正確性。
刪除演算法**
執行結果/*在順序表中刪除第i個元素*/
int listdelete_sq(sqlist *l,int i)
l->length--;
return ok;
}
演算法分析
在主函式裡面呼叫刪除功能函式並傳引數進去時,當把順序表和序號i傳值進去時,程式可以先判斷所傳值是否滿足條件,若滿足,則開始從順序表第乙個元素開始依次遍歷,直到找到第i個位置的元素,並將其刪除,後面的元素依次前移,填補。而表的長度則減一,刪除成功。若不滿足,則返回0,表示刪除失敗。
查詢演算法**:
執行結果/*在順序表中查詢指定值元素,返回其序號*/
int listlocate(sqlist *l,elemtype e)
}
}
演算法分析
在主函式裡面呼叫查詢功能函式並傳引數進去時,程式將自動跳到函式體裡面,當把順序表和要查詢的值e傳值進去時,程式開始從順序表第乙個元素開始依次遍歷,直到找到值為e的元素,並返回其位置序號,查詢成功。若遍歷了順序表所有元素依然沒有符合條件的e的值,則查詢失敗。
3、閱讀下面程式,在橫線處填寫函式的基本功能。並執行程式,寫出結果。
執行結果#include#define error 0
#define ok 1
typedef int elemtype; /*定義表元素的型別*/
typedef struct lnodelnode,*linklist;
linklist createlist(int n); /建立單鏈表/
void printlist(linklist l); /輸出帶頭結點單鏈表的所有元素/
int getelem(linklist l,int i,elemtype e); /表中第i個元素賦值為e*/
linklist createlist(int n)
return head;
}/createlist*/
void printlist(linklist l)
}/printlist*/
int getelem(linklist l,int i,elemtype *e)
if(!p||j>i)
return error;
e=p->data;
return ok;
}/getelem/
int main()else
printf("error");
return 0;
}
演算法分析
時間複雜度:o(n)
4、為第3題補充插入功能函式和刪除功能函式。並在主函式中補充**驗證演算法的正確性。
插入演算法**:
int insertlist(linklist l,int i,elemtype e)
if(!p) return error;
q=(lnode*)malloc(sizeof(lnode));
q->data=e;q->next=p->next;p->next=q;
return ok;
}執行結果
演算法分析
刪除演算法**
int deletelist(linklist l ,elemtype e)
if(!p) return error;
else
}
執行結果
演算法分析
順序儲存結構需要平均移動表長一半的元素,時間複雜度o(n),建立帶頭結點的單鏈表,首先輸入結點數,然後依次輸入各個結點的值;輸出單鏈表中的值;輸入刪除元素的位置,輸出單鏈表中的值。
四、實驗小結
通過本次實驗,掌握了線性表中元素的概念,操作體驗了順序表與鍊錶的建立、插入元素、刪除表中某元素的演算法。
第三次作業
2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...
第三次作業
1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...
第三次作業
p67 2 12 有600mb的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率是2.4kbps 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kbps,其結果又如何?解 1 t 600 1024...