線性表的順序儲存結構(C語言實現)

2021-08-09 02:13:52 字數 2094 閱讀 4571

最近在研究資料結構,看了好多資料結構方面的書,但好多書都是用的偽**實現,對初學者或者語言功底不深厚的同學來說很不友好,也有好多書說是用c語言實現,但應用了c++的東西,比如c++中的引用,導致**晦澀難懂。

學資料結構不能只是看書,一定要將各種結構用**實現,我也將各個部分實現的**貼出來。

首先是線性表的順序儲存結構

#include

#include

#define ok 1

#define error 0

#define true 1

#define false 0

#define maxsize 20

typedef int elemtype;

typedef int status;

typedef structsqlist;

/*建立順序表*/

void createlist(sqlist *l, elemtype a, int n) //由a中的n個元素建立順序表

}/*初始化順序表*/

void initlist(sqlist *l)

/*判斷順序表是否為空*/

bool listempty(sqlist *l)

/*求順序表長度*/

status listlength(sqlist *l)

/*輸出順序表*/

void displist(sqlist *l)

}/*獲得順序表中第i個資料元素的值,並用e返回*/

status getelem(sqlist l, int i, elemtype *e)

/*在l中第i個資料元素之前插入新的資料元素e,l的長度加1

*/status listinsert(sqlist *l,int i,elemtype e)

l->data[i - 1] = e;

l->length++;

return ok;

}/*刪除l中第i個資料元素,並用e返回,l長度減1

*/status listdelete(sqlist *l, int i, elemtype *e)

l->length--;

return ok;

}int main();

intm = 8;//陣列的長度

int i;

int e;

sqlist l;

createlist(&l, b, m); //建立順序表

displist(&l);

printf("\n");

i = getelem(l, 2, &e);

printf("%d\n", e);

printf("\n");

int j = 4;

i = listinsert(&l, 2, j); //在第二個元素之前插入元素j

displist(&l);

printf("\n");

int l_length = listlength(&l); //獲取順序表的長度

printf("%d\n", l_length);

printf("\n");

i = listdelete(&l, 6, &e);//刪除第六個元素

displist(&l);

printf("\n");

initlist(&l); //初始化

printf("%d\n", listlength(&l));//輸出初始化後的長度

system("pause");

return

0;}

執行結果如下:

我剛開始學的時候,對形參當中的值傳遞方式糾結了很久,比如形參中什麼時候用sqlist *l,什麼時候用sqlist l,還有比如listinsert()函式的形參是elemtype e,而listdelete()函式中是elemtype *e。我的理解是,值要改變,就用指標作形參,比如插入函式中只是把e插到順序表中,e的值不變,而刪除函式中,要將刪除的值賦值給e,e的值變為被刪除元素的值,所以用指標作形參。

線性表 順序儲存結構 C語言實現

參考 大話資料結構 程杰 部落格 豆瓣 主要包括 列表定義 判斷列表是否為空 初始化列表 列印列表 清空列表 得到第i個位置元素 元素定位 列表第i個元素插入 列表第i個元素刪除 計算列表長度 include include define ok 1 define error 0 define tru...

線性表 順序儲存C語言實現

定義 線性表是包含有限相同型別元素,除首元素外,其他元素只有乙個唯一前驅元素,除尾元素外,其他元素只有乙個後繼元素的線性結構表。均有2種儲存方式 順序儲存 鏈式儲存 資料結構定義 typedef struct tabletable 基本操作 table inittable t.length 0 re...

線性表的順序儲存結構的c語言實現

線性表的順序儲存結構可以由一維陣列實現 其查詢第i個元素的時間複雜度是o 1 直接訪問對應下標的陣列值即可data i 1 假設陣列從0開始記 但插入刪除操作的時間複雜度是o n 因為刪除 插入第i個元素時,i號元素其後的所有元素都要相應移動!include include 線性表的順序儲存結構 d...