C語言 單鏈表的順序實現 資料結構一

2021-06-18 16:18:55 字數 4220 閱讀 4455

1.資料型別定義

在**中為了清楚的表示一些錯誤和函式執行狀態,我們預先定義一些變數來表示這些狀態。在head.h標頭檔案中有如下定義:

//定義資料結構中要用到的一些變數和型別

#ifndef head_h

#define head_h

#include #include #include #define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

#define overflow -2 //分配記憶體出錯

typedef int status; //函式返回值型別

typedef int elemtype; //使用者定義的資料型別

#endif

2.單鏈表資料結構實現

為了實現單鏈表,我們定義結構體 linearlist,具體**如下:

typedef structlinearlist;

3.鍊錶方法摘要

status initlist(linearlist & l);    //初始化鍊錶

status destroylist(linearlist &l); //銷毀鍊錶

status clearlist(linearlist &l); //清空鍊錶

status listempty(linearlist l); //鍊錶是否為空

status listlength(linearlist l); //鍊錶長度

status getelem(linearlist l,int i,elemtype &e); //獲得鍊錶第i位置的長度,返回給e

status locateelem(linearlist l,elemtype e,status(*comp)(elemtype,elemtype)); //鍊錶中滿足comp條件的資料的位置

status priorelem(linearlist l,elemtype cur_e,elemtype &per_e) // cur_e的前乙個資料

status nextelem(linearlist l,elemtype cur_e,elemtype &next_e); //cur_e的後乙個資料

status listinsert(linearlist &l,int i,elemtype e); //在第i個位置插入e

status listdelete(linearlist &l,int i,elemtype &e); //刪除第i位置資料,並給e

status union(linearlist &la,linearlist lb); //la=la並lb

status mergelist(linearlist la,linearlist lb,linearlist &lc); //la和lb從小到大排序後給lc

status mergelist_pt(linearlist la,linearlist lb,linearlist &lc); //la和lb從小到大排序後給lc,指標實現

4.單鏈表順序實現

在linearlist.h檔案中實現單鏈表的方法,具體**如下:

#ifndef linearlist_h

#define linearlist_h

#include "head.h"

#define list_init_size 100 //初始化鍊錶大小

#define list_incerment 10 //鍊錶容量增加基本單元

typedef structlinearlist;

status equal(int a,int b)

status initlist(linearlist & l)

status destroylist(linearlist &l);

status clearlist(linearlist &l)

status listempty(linearlist l)

status listlength(linearlist l)

status getelem(linearlist l,int i,elemtype &e)

status locateelem(linearlist l,elemtype e,status(*comp)(elemtype,elemtype))

elemtype *q=&l.elem[i-1];

elemtype *p=&l.elem[length];

while(q<=p)

*q=e;

++l.length;

return ok;

};status listdelete(linearlist &l,int i,elemtype &e)

--l.length;

return ok;

}status union(linearlist &la,linearlist lb)

} return ok;

}status mergelist(linearlist la,linearlist lb,linearlist &lc)else

} while(i<=la_l)

while(j<=lb_l)

return ok;

}status mergelist_pt(linearlist la,linearlist lb,linearlist &lc)else

} while(pa<=pa_last)

while(pb<=pb_last)

return ok;

}#endif

5.單鏈表測試

#include "linearlist.h"

void main()

printf("end");

elemtype e;

listdelete(l,5,e); //刪除第5位置資料

printf("\n刪除第5位置資料為:%d",e);

priorelem(l,6,e); //前乙個資料

printf("\n6的前乙個資料:%d",e);

nextelem(l,6,e); //後乙個資料

printf("\n6的後乙個資料:%d",e);

printf("\n鍊錶中資料:");

for(int i=1;i",e);

} printf("end\n");

linearlist lb;

linearlist lc;

initlist(lb);

for(int i=1;i<10;i++)

listinsert(lb,i,i+5);

printf("\n鍊錶lb中資料:");

for(int i=1;i",e);

} printf("end\n");

union(l,lb); //l=l並lb

printf("\n鍊錶l中資料:");

for(int i=1;i",e);

} printf("end");

//mergelist(l,lb,lc); //測試mergelist()

mergelist_pt(l,lb,lc); //測試mergelist_pt()

printf("\n鍊錶lc中資料:");

for(int i=1;i",e);

} printf("end\n");

}

6.測試結果

鍊錶l中資料:1->2->3->4->5->6->7->8->end

刪除第5位置資料為:5

6的前乙個資料:4

6的後乙個資料:7

鍊錶中資料:1->2->3->4->6->7->8->end

鍊錶lb中資料:6->7->8->9->10->11->12->13->end

鍊錶l中資料:1->2->3->4->6->7->8->9->10->11->12->13->end

鍊錶lc中資料:1->2->3->4->6->6->7->7->8->8->9->9->10->10->11->11->12->12->13->13->14->end

C語言資料結構單鏈表的實現

對於單鏈表這種結構來說,如何理解指標還有插入刪除等操作的實質是非常重要的,我今天晚上繼續完成昨天的單鏈表留下的任務,現在對於指標的指示的原理還不是那麼的清晰,這個確實比較難 不過既然已經實現了功能,就先這樣吧!include using namespace std typedef struct ln...

資料結構(c語言)單鏈表的實現

include include include using namespace std typedef int elemtype typedef struct lnodelnode,linklist 這裡的lnode是結構體的別名,不是結構變數名 而linklist是struct lnode 的別名...

資料結構 單鏈表c語言實現

list.h如下 ifndef list h define list h typedef struct node node,list void initlist list list bool insert head list list,int val bool insert tail list li...