資料結構與演算法 鍊錶

2021-08-08 16:10:19 字數 1534 閱讀 4001

在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧:我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構(即某一資料項的前繼節點和後繼節點有且只有乙個)要麼是非線性結構(即某一資料節點的前驅或者後繼節點不止乙個)。在確定了實際資料項的資料結構之後,我們要採用某種儲存方式對其進行儲存,常見的資料結構的儲存方式有:順序儲存、鏈式儲存、雜湊儲存以及索引儲存。每一種儲存方式都有乙個基礎資料結構與其對應,如陣列是順序儲存的基礎資料結構,鍊錶是鏈式儲存基礎資料結構等等。所以徹底理解了鍊錶也即會非常容易的理解其他基於鏈式儲存的資料結構。

鍊錶:根據指標域的不同,鍊錶分為單向鍊錶、雙向鍊錶、迴圈鍊錶等等。

單向鍊錶是鍊錶中最簡單的,每個元素包含乙個指標域和乙個數值域,我們稱這樣的元素為乙個節點,每個節點用來儲存實際資料中的乙個資料項,每個節點的指標域指向下乙個節點,最後乙個指向乙個空值。即乙個單項鍊表的乙個節點分為兩個部分,第一部分儲存或者顯示關於節點的資訊,第二部分儲存下乙個節點的位址,單鏈表只能向乙個方向進行遍歷。下面我們來具體實現乙個單鏈表:

首先我們要定義乙個節點,用於儲存資料項的各項資訊:

typedef

node

linknode;

生成乙個包含ncount個節點的鍊錶:

linknode* createlink(int ncount)//尾插法

p->next = null;

return pheadnode

}

刪除鍊錶某乙個節點:

linknode * deletenode(linknode * pheadnode, int thedata)

while(pheadnode->next!=

null)

return pheadnode;

}

查詢鍊錶中包含某一元素的節點

linknode* searchnode(linknode *pheadnode, int thedata)

在鍊錶中,在pos位置增加乙個元素:

linknode* addnode(linknode* pheadnode, int

pos, int number)

linknode* theaddnode = malloc(sizeof(linknode));

theaddnode->data = number

theaddnode->next = pheadnode->next;

pheadnode->next = theaddnode;

}

鍊錶的遍歷

void printlink(linknode* pheadnode)

到此我們完成了單向鍊錶的一部分功能,當然**不是特別完善,所以我會不定時更新完善這部分。當然還有雙向鍊錶和迴圈鍊錶等,但在此就不一一介紹了,後面有需要的會補上來的。

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...

資料結構與演算法 鍊錶

反轉鍊錶 def reverse head q none p heap while p temp p.next p.next q q pp temp return p判斷鍊錶環 def meetingnode head if not head return slow head fast head.n...

資料結構與演算法 鍊錶

鍊錶 優點 插入刪除快 缺點 不支援隨機訪問 messagequeue 插入 enqueuemessage 按照時間順序插入 刪除 next mahjong.class author csy created by csy on 2019 1 28.public class mahjong overr...