#include
#include
using namespace std;
typedef string elemtype;
typedef struct lnodelnode, *slink;
void initlist(slink &l);
void locateelem(slink l);
void listinsert(slink &l);
void listdelete(slink &l);
void destroylist(slink &l);
void listlength(slink l);
void listempty(slink l);
void getelem(slink l);
void mergelist_l();
//尾插法初始化建立單鏈表
void initlist(slink &l)
r->next = null;
system("pause");
}//initlist
void locateelem(slink l)
p = l;
cout << "請輸入要查詢的元素:";
cin >> e;
while(p && p->data != e)
if(p) cout << "所找元素的位置為:" << j; //找到滿足判定條件的資料元素為第j個元素
else cout << "所找的元素不存在"; //該單鏈表中不存在滿足判定的資料元素
cout << '\n';
system("pause");
}//locateelem
void listinsert(slink &l)
p = l; j = 0;
cout << "請輸入插入節點的位置及插入的元素:";
cin >> pos >> e;
while(p &&j < pos - 1)
//while
if(!p || j > pos - 1)
s = new lnode;
if(!s) exit(1); //儲存空間失敗
s->data = e; //建立新元素節點
s->next = p->next; p->next = s; //修改指標
cout << "插入後的單鏈表:";
q = l->next;
while(q)
cout << '\n';
system("pause");
}//listinsert
void listdelete(slink &l)
cout << "請輸入刪除節點的位置:";
cin >> pos;
p = l; j = 0;
while(p ->next &&j < pos - 1)
//while
if(!(p->next) || j > pos - 1)
q = p->next; p->next = q->next; //修改指標
delete(q); //釋放節點空間
cout << "刪除後的單鏈表:";
r = l->next;
while(r)
cout << '\n';
system("pause");
}//listdelete
void destroylist(slink &l)
//銷毀以l為頭指標的單鏈表,釋放鍊錶中所有節點的空間
slink p;
while(l)
//while
l = null; //雖然頭節點占有的空間已經釋放,但指標變數l中的值沒有改變,為安全起見,置l為空,以防止對系統空間的訪問
cout << "鍊錶已銷毀" << '\n';
system("pause");
}//destroylist
void listlength(slink l)
while(p)
cout << "單鏈表表長為:" << j - 1 << '\n';
system("pause");
}void listempty(slink l)
if(l->next == null)
cout << "該單鏈表表為空\n";
else
cout << "該單鏈表不為空\n";
system("pause");
}void getelem(slink l)
cout << "取出單鏈表元素的位置:";
cin >> pos;
p = l->next; //變數初始化,p指向第乙個節點
j = 1;
while(p && j < pos)
//while
if(!p || j > pos)
e = p->data; //取到第pos個元素
cout << "取出的元素為:" << e << '\n';
system("pause");
}//getelem
void mergelist_l()
ra->next = null;
cout << "請輸入單鏈表lb元素個數:";
cin >> n;
lb = new lnode;
rb = lb;
if(!lb) exit(0); //儲存空間分配失敗
cout << "請輸入單鏈表lb的元素:";
for(j = 0; j < n; j++)
rb->next = null;
pa = la->next; pb = lb->next; lc = pc = la; q = lc->next;
while(pa && pb) //將pa,pb節點按大小一次插入c中
else
}pc->next = pa ? pa : pb;
delete lb; //釋放lb頭節點
j = 0;
while(j < m + n)
cout << '\n';
system("pause");
}//mergelist_l
資料結構 單鏈表(C 版)
模擬鍊錶 用兩個陣列模擬動態鍊錶,因為c 中動態記憶體申請太慢,所以用靜態的陣列模擬動態鍊錶,提高演算法效率。基本思路 與動態鍊錶的操作原理和步驟大致相同,只不過是用陣列代替節點,用變數代替指標 模板 head儲存煉表頭,e儲存節點的值 即資料域 ne儲存節點的next指標 即指標域 idx表示當前...
資料結構之單鏈表(c語言版)
線性表的儲存方式有 鏈式儲存和順序儲存 1.先來談談鏈式儲存 優點 插入元素和刪除元素比較方便 缺點 只能順序訪問,不能隨機訪問 2.特點 用一組任意的儲存單元 記憶體空間 來儲存線性表中的元素,這組儲存單元可以是連續的,也可以不是連續的。3.鍊錶是一種動態地進行儲存單元分配的資料結構 為了表示節點...
資料結構之單鏈表 c
templatestruct node node t x,node next null templateclass linklist 1 預設建構函式 templatelinklist linklist 建構函式1 2 有參建構函式 templatelinklist linklist t a,int...