這個作業屬於哪個課程
這個作業要求在**
homework/11232
這個作業的目標
《學習有關順序表和煉表的程式》
學號<2018204266>
一、實驗目的
1、掌握線性表中元素的前驅、後續的概念。
2、掌握順序表與鍊錶的建立、插入元素、刪除表中某元素的演算法。
3、對線性表相應演算法的時間複雜度進行分析。
4、理解順序表、鍊錶資料結構的特點(優缺點)。
二、實驗預習
說明以下概念
1、線性表:
線性表是由n個資料元素(結點)a1,a2…an組成的有限序列。
2、順序表:
順序表是在計算機記憶體中以陣列的形式儲存的線性表
3、鍊錶:
鍊錶是用一組人以的儲存單元來存放線性表的結點。
三、實驗內容和要求
1、閱讀下面程式,在橫線處填寫函式的基本功能。並執行程式,寫出結果。
#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); /*___創造乙個新的順序表,長度為n__*/
int listinsert_sq(sqlist *l,int i,elemtype e);/*_在第i個元素前插入元素e_*/
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)
return ok;
}/*createlist*/
/*輸出順序表中的元素*/
int printlist_sq(sqlist *l)/*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)
int main()
else
printf("error");
return 0;
}
執行結果
演算法分析
首先定義順序表,然後編譯功能函式,呼叫功能函式實現鍊錶的運算。
2、為第1題補充刪除和查詢功能函式,並在主函式中補充**驗證演算法的正確性。
刪除演算法**:
/*在順序表中刪除第i個元素*/
int listdelete_sq(sqlist *l,int i)
}
執行結果
演算法分析
在主函式中呼叫刪除函式,從第乙個元素開始,直到找到刪除的元素的位置,後面的元素需要前移到該刪除元素位置。
查詢演算法**:
int listlocate(sqlist *l,elemtype e)
執行結果
演算法分析
在主函式中呼叫查詢函式,從第乙個元素開始,知道找到插入元素的節點位置,設定其返回到查詢序號,若查詢不到該元素,返回0。
3、閱讀下面程式,在橫線處填寫函式的基本功能。並執行程式,寫出結果。
#include#include#define error 0
#define ok 1
typedef int elemtype; /*定義表元素的型別*/
typedef struct lnodelnode,*linklist;
linklist createlist(int n); /*_構造長度為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;
}
執行結果
演算法分析
首先對單鏈表進行定義,編譯功能函式,首先呼叫建立的函式表,然後呼叫編譯的功能函式
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;
}
執行結果
演算法分析
將插入的位置和值輸入,程式從第乙個元素開始尋找,直到找到插入位置,用指標p指向這個元素,建立乙個元素是e的指標q,修改節點q和next的域,指向p的下乙個節點,將p的域更新,插入成功。
刪除演算法**:
int deletelist(linklist l ,elemtype e)
if(!p) return error;
else }
執行結果
演算法分析
輸入刪除的元素,程式從第乙個元素開始,知道找到該元素的前乙個節點,用指標p指向該節點元素,用指標q指向要刪除的元素節點,修改p和next的域指向q,刪除成功。
四、實驗小結
通過這次實驗,我對有關順序表和煉表的程式有了更深的了解,對以後的學習有了很大得到幫助。
第三次作業
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...