第三次作業

2022-08-23 15:39:12 字數 4125 閱讀 2309

這個作業屬於哪個課程

這個作業要求在**

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