6月28日 單鏈表的實現和各種操作複習

2021-10-07 13:59:40 字數 3027 閱讀 1189

使用軟體devc++

1.單鏈表的建立

有兩種建立的方法

1.帶有頭節點:頭節點是指向資料第乙個元素的節點

頭指標:指向頭節點的指標

頭節點不儲存鍊錶元素但是可以儲存類似鍊錶長度的值

帶有頭節點的鍊錶的操作可以更加規範,這裡主要體現在插入操作上,如果沒有頭節點的話,頭插法在頭節點處我們是直接插入,沒有前置節點,而有的話,我們有一前一後兩個節點,這樣就起到了規範操作的作用

自己使用了王道的頭插法鍊錶,基本操作就是建立乙個頭指標,然後頭指標之後進行插入,最後的輸出是倒序

**為:

#include

# include

#include

typedef

struct node

node,

*pnode;

//建立乙個長度為自己輸入的n長度的頭插法單鏈表

intmain()

//迴圈的具體實現邏輯是,每次建立單個的節點插入在頭節點和第乙個節點之間,稱為頭插法,然後依次迴圈n次

printf

("完成建立!\n");

printf

("建立後的鍊錶元素為:");

pnode p = phead->next;

while

(null

!= p)

//迴圈輸出的順序是倒數,從頭節點的下乙個節點開始迴圈

printf

("\n");

return0;

}

2.尾插法

這裡的主要邏輯是,在每個鍊錶的最後設定乙個尾結點,我們設定乙個尾指標指向尾結點

然後建立新的節點插入尾結點的後面,然後將尾指標指向新的節電,這樣就可以完成尾插法

**如下:

#include

# include

#include

typedef

struct node

node,

*pnode;

//建立乙個長度為自己輸入的n長度的尾插法單鏈表

intmain()

//迴圈的具體實現邏輯是,每次建立單個的節點插入在尾結點後,稱為尾插法,然後將尾指標指向新建的節點,依次迴圈n次

printf

("完成建立!\n");

printf

("建立後的鍊錶元素為:");

pnode p = phead->next;

while

(null

!= p)

//迴圈輸出的順序是正序數,從頭節點的下乙個節點開始迴圈

printf

("\n");

return0;

}

注意,這裡設定s的時候需要將s-》next設定為null,不然會出現無限迴圈1.按序號尋找

具體邏輯:按序號來查詢鍊錶中的節點,給出引數i然後根據一從頭節點乙個乙個向下定址,直到找到序號為j的節點,當節點序號為0時,返回頭指標,當序號小於1的時候,返回null,表示不存在,

迴圈條件:1.節點不為0,j*

getnode

(pnode head,

int i)

if(j==i)

else

}這裡我自己寫的,我不知道為啥會超出整數域。。。。

但是邏輯還是一樣的

2.按值查詢

具體邏輯:在鍊錶中尋找有沒有一樣的值,沒有的話返回null

node*

locatelem

(pnode head,

int e)

return p;

}

這裡因為是值的查詢,所以沒有序號的返回。

這個操作需要尋找序號的函式進行輔助

具體**如下

void

insert

(pnode l,

int i)

//插入函式:輸入你需要插入的位置和鍊錶的頭指標,然後在函式內輸入你需要插入的值,再利用尋找函式找到對應序數的位置i-1,進行插入

後插法前插法區別一般來說,不知道i位置的節點時時間複雜度都為o(n)

但是,如果知道需要插入節點前乙個的位置,則後插法為o(1),前插法為o(n),那麼,如何利用後插法實現前插法呢?首先,我們進行一次後插法,然後將p節點的資料和插入節點的資料進行交換就可以實現了

這個操作也是依賴於根據序號定址的函式進行的

具體邏輯如下:

先找到第i個需要刪除位置的節點,然後將前乙個節點的next指標指向被刪除節點的下乙個節點,然後用乙個變數元素儲存被刪除節點,最後釋放記憶體即可

如果已給定的話,刪除操作也可以優化為o(1)時間複雜度。原理同上。

求表長**如下

int i =0;

//phead為頭指標

pnode p = phead;

while

(p->next!=

null

) p = p->next;

i++;return i;

求表空條件

1.有頭節點

phead->next =

null

;2.無頭節點

phead =

null

;

實現迴圈單鏈表各種基本運算的演算法

實驗題目 實現迴圈單鏈表各種基本運算的演算法 實驗內容 編寫乙個程式實現迴圈單鏈表的各種基本運算,並在此基礎上設計乙個主程式 完成如下功能 1 初始化迴圈單鏈表h 2 依次採用尾部插入法插入a,b,c,d,e元素 3 輸出迴圈單鏈表h 4 輸出迴圈單鏈表h長度 5 判斷迴圈單鏈表h是否為空 6 輸出...

使用STL中的list容器實現單鏈表的操作

include include include using namespace std void print int item int main cout print是個函式,實現物件的輸出功能 cout 鍊錶為 std for each listintegers.begin listinteger...

使用STL中的list容器實現單鏈表的操作

include include include using namespace std void print int item int main cout print是個函式,實現物件的輸出功能 cout 鍊錶為 std for each listintegers.begin listinteger...