第三次作業

2022-08-12 11:12:17 字數 3974 閱讀 2663

這個作業屬於哪個課程

這個作業要求在**

/homework/11232

這個作業的目標

《對線性表、順序表、鍊錶有乙個初步的理解》

學號2018204206

一、實驗目的

1、掌握線性表中元素的前驅、後續的概念。

2、掌握順序表與鍊錶的建立、插入元素、刪除表中某元素的演算法。

3、對線性表相應演算法的時間複雜度進行分析。

4、理解順序表、鍊錶資料結構的特點(優缺點)。

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); /*初始化順序表l,並將其長度設為0*/

int createlist_sq(sqlist *l,int n); /*構造順序表的長度為n*/

int listinsert_sq(sqlist *l,int i,elemtype e);/*在順序線性表l中第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)/*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;

}

執行結果:演算法分析:呼叫listinsert_sq()函式進行插入操作,並輸出插入新元素後的狀態。

2、為第1題補充刪除和查詢功能函式,並在主函式中補充**驗證演算法的正確性。

刪除演算法**:

int listdelete_sq(sqlist *l,int i)
執行結果:

演算法分析:在主函式中呼叫刪除函式,從第乙個元素開始,直到找到刪除的元素的位置,後一位的元素會前移到該刪除元素位置。

查詢演算法**:

int listlocate(sqlist *l,elemtype 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); /*在順序表l中,當第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 listinsert_sq(lnode *l,int i,elemtype e)
執行結果:

演算法分析:建立帶頭結點的單鏈表,首先輸入結點數,然後依次輸入各個結點的值;輸入插入元素的位置和插入的元素,最後輸出插入後的新鍊錶。

刪除演算法**:

int deletelist(linklist l,elemtype e)

if(!p)

return error;

else

}

執行結果:

演算法分析:建立帶頭結點的單鏈表,首先輸入結點數,然後依次輸入各個結點的值;輸入刪除元素的位置和插入的元素,最後輸出刪除後的新鍊錶。

四、實驗小結

通過這次實驗,對插入與刪除功能函式有了初步的認知與了解。

第三次作業

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