第三次作業

2022-08-23 18:30:14 字數 4187 閱讀 6859

這個作業屬於哪個課程

這個作業要求在**

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...