不帶頭結點的單鏈表

2022-09-08 09:54:08 字數 3210 閱讀 7694

單鏈表也可以不設頭結點,如圖212 所示。顯

然,基於這種結構的基本操作和帶有頭結點的線性鏈

表基本操作是不同的。bo2-8.cpp 是不帶頭結點的線

性鍊錶的基本操作。

// bo2-8.cpp 不帶頭結點的單鏈表(儲存結構由c2-2.h定義)的部分基本操作(9個)

#define destroylist clearlist // destroylist()和clearlist()的操作是一樣的

void initlist(linklist &l)

void clearlist(linklist &l)

}status listempty(linklist l)

int listlength(linklist l)

return i;

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

if(j==i) // 存在第i個元素

else

return error;

}int locateelem(linklist l,elemtype e,status(*compare)(elemtype,elemtype))

return 0;

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

else

if(!p) // i大於表長+1

return error;

s->next=p->next;

p->next=s;

}return ok;

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

else

if(!p->next||j>i-1) // 刪除位置不合理

return error;

q=p->next; // 刪除並釋放結點

// bo2-9.cpp 不帶頭結點的單鏈表(儲存結構由c2-2.h定義)的部分基本操作(2個)

status priorelem(linklist l,elemtype cur_e,elemtype &pre_e)

p=q; // p向後移

}return infeasible;

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

p=p->next;

}return infeasible;

}

// main2-8.cpp 檢驗bo2-8.cpp和bo2-9.cpp的主程式

#include"c1.h"

typedef int elemtype;

#include"c2-2.h"

#include"bo2-8.cpp"

#include"bo2-9.cpp"

#include"func2-3.cpp" // 包括equal()、comp()、print()、print2()和print1()函式

void main()

printf("在l的表頭依次插入1~5後:l=");

listtr**erse(l,print); // 依次對元素呼叫print(),輸出元素的值

i=listempty(l);

printf("l是否空:i=%d(1:是0:否)\n",i);

clearlist(l);

printf("清空l後:l=");

listtr**erse(l,print);

i=listempty(l);

printf("l是否空:i=%d(1:是0:否)\n",i);

for(j=1;j<=10;j++)

listinsert(l,j,j);

printf("在l的表尾依次插入1~10後:l=");

listtr**erse(l,print);

i=getelem(l,5,e);

if(i==ok)

printf("第5個元素的值為%d\n",e);

for(j=0;j<=1;j++)

for(j=1;j<=2;j++) // 測試頭兩個資料

for(j=listlength(l)-1;j<=listlength(l);j++) // 最後兩個資料

k=listlength(l); // k為表長

for(j=k+1;j>=k;j--)

printf("依次輸出l的元素:");

listtr**erse(l,print);

destroylist(l);

printf("銷毀l後:l=%u\n",l);

}

執行結果如下:

/*

在l的表頭依次插入1~5後:l=5 4 3 2 1

l是否空:i=0(1:是0:否)

清空l後:l=

l是否空:i=1(1:是0:否)

在l的表尾依次插入1~10後:l=1 2 3 4 5 6 7 8 9 10

第5個元素的值為5

沒有值為0的元素

第1個元素的值為1

元素1無前驅

元素2的前驅為1

元素9的後繼為10

元素10無後繼

刪除第11個元素失敗

刪除第10個元素成功,其值為10

依次輸出l的元素:1 2 3 4 5 6 7 8 9

銷毀l後:l=0

press any key to continue

*/

不帶頭結點的單鏈表

slist.h pragma once typedef int sldatatype typedef struct slistnode slistnode 不帶頭節點的單鏈表 鍊錶初始化 void slistinit slistnode phead 建立新結點 slistnode slistnewn...

不帶頭結點的單鏈表

不帶頭結點的鍊錶的實現 核心是直接設定頭指標指向第乙個節點 要注意此時的l的位址可能會發生改變.同時還要注意一級指標和二級指標的區別.注意linklist l和linklist l的區別 和帶結點的單鏈表的操作相比較,要考慮到頭指標就是頭結點,在一些會改變頭結點的情況下要仔細考慮.include i...

單鏈表的建立(帶頭結點以及不帶頭結點)

include stdio.h include stdlib.h typedef struct list list list headcreatlist 頭插法建立鍊錶,不帶頭結點 return head list tailcreatlist 尾插法建立鍊錶,不帶頭結點 r next s 將l指向的...