c c 單鏈表的建立和刪除,插入,反轉操作

2021-06-29 10:49:52 字數 2323 閱讀 4907

鍊錶是c/c++中的乙個重要的資料結構

首先,他在物理儲存上是非連續的,跟陣列正好相反,陣列是一系列連續的儲存單元,這樣的特性可能會使鍊錶的訪問時間複雜度o(n)高於陣列o(1),但是對於鍊錶的插入操作可以達到o(1),刪除同理,所以當我們處理資料可能會有大量的插入或者刪除操作時,用鍊錶存放資料就非常適用啦

另外,因為鍊錶在記憶體中是不連續的,所以它可以充分利用記憶體,同時,在記憶體空間足夠的情況下,它的大小也是沒有限制的,鍊錶支援動態增長,而陣列則是需要預先分配記憶體,可能會浪費掉一些記憶體資源(因為可能根本不會用到某些記憶體單元)

所以,其實鍊錶還是相當有用滴   廢話說了一些,開始碼**了

先看一下結構體的構成吧:

struct node

node(int elem_)

};

資料域只有乙個int型別的資料elem,指標域為next,指向下乙個節點; 預設建構函式將elem屬性初始化為0,指向null,建構函式將elem屬性初始化為引數elem_的值,指向的節點同樣為null

首先講一下如何建立鍊錶

方法很簡單,根據你現有的資料,建立新的node節點,然後用next指標把鍊錶和這些節點串聯起來

node *createnodelist();

node *head = new node();

if(head == null)else

return head;

}}

現在開始講一下插入操作,插入操作又分為幾種,一種是煉表頭插入操作,一種是鍊錶尾插入操作,一種是鍊錶中間插入操作,

表頭插入很簡單,直接新建乙個節點,指向當前的頭節點就ok了

node *insertathead(node *head, int elem)else	

}

表尾插入,需要將指標移動到列表尾,然後進行插入操作

node *insertattail(node *head, int elem)

temp = new node(elem);

currenthead->next = temp;

return head;

}}

一般插入,這裡模擬的是在乙個有序鍊錶中插入節點,使得插入之後,鍊錶仍然有序,這種插入可能會遇到在表頭插入或者在表尾插入的情況,所以我們要單獨考慮這兩種情況

node *insert(node *head, int elem)elseelse

currenthead = currenthead->next;

}//在表尾插入

if(currenthead->next == null)

return head;

} }}

刪除節點同樣有3個版本,在煉表表頭刪除,在煉表表尾刪除,和在鍊錶中間刪除

首先是在煉表表頭刪除節點,這個操作很簡單,斷開當前表頭和鍊錶的連線即可

node *deleteathead(node *head)
然後是在煉表表尾刪除節點,同樣很容易,只要將鍊錶遍歷一遍,最後斷開尾節點跟前驅節點的連線即可

node *deleteattail(node *head)

//經過while迴圈後,currenthead現在是尾節點,prev是它的前驅節點

prev->next = null;

return head;

}

現在再來說一下通過資料成員匹配的刪除,這種情況下的刪除需要記錄下刪除節點的前驅節點和下乙個節點,然後讓這兩個節點連線起來,過程如下
node *deletebyelem(node *head, int elem)else

prev = currenthead;

currenthead = currenthead->next;

} return head;

}}

最後就是稍微複雜一點的鍊錶反轉操作,我的做法是這樣的,每次讓當前表的表頭與剩下節點斷開,然後插入到反轉鍊錶的表頭,這樣就完成了鍊錶的反轉

node *revearsenodelist(node *head)else

return head;

}}

好了,差不多就是這些了,不過最近看到網上很多人對於表頭,表尾是否為空有一些疑問,其實表頭跟表尾為空或者不為空都是可以的,我這裡的實現,表頭,表尾都用來存放資料

上面的**都是經過除錯的,如果有什麼bug希望大家給我指出來,一起學習,一起進步~~

單鏈表 建立插入刪除

建立乙個工程,在其中新增 list.h 標頭檔案,list.cpp原始檔和main.cpp原始檔。標頭檔案list.h中進行資料型別抽象 adt 宣告了乙個結構體和對應的操作,如下 ifndef list h define list h typedef struct list list 函式宣告 l...

單鏈表 建立 插入 刪除 查詢 反轉等操作

ifndef list h define list h include include define notfound null typedef struct list node typedef struct list pnode typedef pnode plist typedef pnode ...

單鏈表的建立 刪除 反轉 插入 排序操作

在初學鍊錶時很多人會問,什麼是鍊錶,鍊錶怎麼實現,原理是什麼?的確帶著問題學習會讓你變得更快,鍊錶可以簡單理解為老師領著幼兒園小朋友過馬路,他們手拉手牽著一起,老師在最前面領著後面的小朋友,老師就是這個領頭人 鍊錶的頭節點 每乙個小朋友可以看做乙個節點。鍊錶的節點結構定義 typedef struc...