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