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