最近在研究資料結構,看了好多資料結構方面的書,但好多書都是用的偽**實現,對初學者或者語言功底不深厚的同學來說很不友好,也有好多書說是用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...