資料結構之單鏈表 C 版

2022-05-18 11:46:48 字數 3093 閱讀 6047

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