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

2021-06-18 16:22:01 字數 4307 閱讀 3569

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.單鏈表資料結構實現

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

typedef struct lnodelnode,*linklist;

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

4.單鏈表順序實現

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

#ifndef linklist_h

#define linklist_h

#include "head.h"

typedef struct lnodelnode,*linklist;

status equal(int a,int b)

status initlist(linklist &l)

status destroylist(linklist &l)

return ok;

};status clearlist(linklist &l)

status listempty(linklist &l)

int listlength(linklist l)

return i;

}status getelem(linklist l,int i,elemtype &e)

e=pt->data;

return ok;

}status locateelem(linklist l,elemtype e,status(*comp)(elemtype,elemtype))

if (i>listlength(l))

return i;

}status priorelem(linklist l,elemtype cur_e,elemtype &per_e)

status nextelem(linklist l,elemtype cur_e,elemtype &next_e)

status listinsert(linklist &l,int i,elemtype e)

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

q->data=e;

q->next=pt->next;

pt->next=q;

return ok;

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

if(!pt||n>i) return error;

linklist q;

q=pt->next;

pt->next=q->next;

e=q->data;

free(q);

q=null;

return ok;

}status union(linklist &la,linklist lb)

} return ok;

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

} while(i<=la_l)

while(j<=lb_l)

return ok;

}#endif

5.單鏈表測試

#include "linklist.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<=listlength(l);i++)

printf("end\n");

linklist lb;

linklist lc;

initlist(lb);

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

listinsert(lb,i,i+5);

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

for(int i=1;i<=listlength(lb);i++)

printf("end\n");

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

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

for(int i=1;i<=listlength(l);i++)

printf("end");

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

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

for(int i=1;i<=listlength(lc);i++)

printf("end\n");

}

6.測試結果

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

刪除第5位置資料為:5

6的前乙個資料:4

6的後乙個資料:7

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

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

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

鍊錶lc中資料:1->2->3->4->6->6->7->7->8->8->9->9->10->10->11->11->12->12->13->13->14->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...