第三次作業 順序表與鍊錶

2022-08-23 16:24:13 字數 4252 閱讀 6940

這個作業屬於哪個課程

這個作業要求在**

/homework/11232

這個作業的目標

理解線性表順序表和煉表,並且掌握順序表與鍊錶的建立插入刪除元素的演算法

學號2018204245

一、概念

線性表:線性表是最基本、最簡單、也是最常用的一種資料結構。線性表(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。

順序表:順序表是在計算機記憶體中以陣列的形式儲存的線性表,線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個元素、使得線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素物理儲存的相鄰關係來反映資料元素之間邏輯上的相鄰關係,採用順序儲存結構的線性表通常稱為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。

鍊錶:鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表順序結構,操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而線性表和順序表相應的時間複雜度分別是o(logn)和o(1)。

二、實驗

1、**

">#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)/*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)

l->length--;

return ok;

}/*在順序表中查詢指定值元素,返回其序號*/

int listlocate(sqlist *l,elemtype e)

return error;

}int main()

else

printf("error");

return 0;

}

執行結果

演算法分析

空間複雜度:o(logn);

時間複雜度:o(n)

2、刪除**

l->length)">    for(int j=i;jlength;j++)

l->slist[j-1]=l->slist[j];

l->length--;

return 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個結點的值___*/

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

}int main()else

printf("error");

return 0;

}執行結果

演算法分析

*空間複雜度:o(logn);

*時間複雜度:o(n).

4、插入**

lnode*p,*q; 

p=l->next;

while(p&&jnext;j++;

} if(!p) return error;

q=(lnode*)malloc(sizeof(lnode));

q->data=e;q->next=p->next;p->next=q;

return ok;

}

執行結果

刪除**

p=l->next; 

while(p&&p->data!=e)

if(!p) return error;

else

}

執行結果

三、總結

通過本次實驗學習了線性表、順序表、鍊錶,以及他們的刪除、插入等基本操作,對演算法有了進一步的認識。

第三次作業 順序表與鍊錶

這個作業屬於哪個課程 這個作業要求在 homework 11232 這個作業的目標 掌握線性表與鍊錶的概念與演算法 學號2018204098 一 實驗目的 1 掌握線性表中元素的前驅 後續的概念。2 掌握順序表與鍊錶的建立 插入元素 刪除表中某元素的演算法。3 對線性表相應演算法的時間複雜度進行分析...

第三次作業

2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...

第三次作業

1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...