資料結構域演算法 鍊錶

2021-09-27 11:03:35 字數 2680 閱讀 3580

#include // 

// 鍊錶的資料結構

// 1. 鍊錶是由每乙個節點連線起來的.

struct node ;

class list

// 2. 在堆空間中申請記憶體來儲存新的節點

node* pnew = new node;

// 2.1 將要插入到鍊錶中的資料儲存在新節點.

pnew->ndata = ndata;

// 3. 在鍊錶中找到插入位置的前乙個節點.

// 3.1 如果插入到的是第0個位置.那麼需要將

// 新節點的首位址記錄在m_phead指標中.

if (nindex == 0)

else

// 4. 將前乙個節點的pnext欄位儲存到新節點的pnext欄位

// 這樣就可以讓新節點記錄下乙個節點

pnew->pnext = ppre->pnext;

// 5. 將新節點的首位址儲存到前乙個節點的pnext欄位

// 這樣通過前乙個節點就能找到新的節點.

ppre->pnext = pnew;

} // 6. 增加節點個數.

++m_ncount;

} /*!

* 函式名 : remove

* 功 能 : 從鍊錶中刪除下標為nindex的元素

* 參 數 : int nindex 要刪除的元素所在的下標

* 返回值 : void

*/void remove(int nindex)

// 2. 找到要刪除的元素的前乙個節點

// 2.1 如果刪除的是第0個節點. 這個節點的首位址

// 是儲存在m_phead頭節點指標中.

// 因此, 直接操作頭節點指標.

if (nindex == 0)

else

// 3. 通過前乙個節點的pnext欄位找到被刪除節點

// 的首位址

node* premovenode = pprenode->pnext;

// 4. 再通過被刪除節點的pnext欄位,得到被刪除

node* pnextnode = premovenode->pnext;

// 被刪除節點的前乙個節點的pnext欄位.

pprenode->pnext = pnextnode;

// 6. 釋放掉被刪除節點的記憶體空間

delete premovenode;

} // 7. 遞減當前節點個數

--m_ncount;

} /*!

* 函式名 : find

* 功 能 : 在鍊錶中查詢元素

* 參 數 : int ndata 被查詢的元素

* 返回值 : int 元素在鍊錶中的下標,找不到了就返回-1

*/int find(int ndata)

// 遞增下標,用於記錄,當前遍歷到了第幾個元素

++nindex;

// 找到下乙個節點

pnode = pnode->pnext;

} return -1;

} /*!

* 函式名 : at

* 功 能 : 獲取指定下標的元素的資料域的引用.

* 參 數 : int nindex 元素所在的下標

* 返回值 : int& 返回資料的引用.這樣就可以在函式外部修改節點的資料了

*/int& at(int nindex)

// 遍歷到指定下標處的節點

node* pnode = m_phead;

for (int i = 0; i < nindex; ++i)

// 返回節點的引用(返回值是int&引用型別)

return pnode->ndata;

} /*!

* 函式名 : push_back

* 功 能 : 將資料插入到鍊錶最後乙個位置

* 參 數 : int ndata

* 返回值 : void

*/void push_back(int ndata)

/*!* 函式名 : pop_back

* 功 能 : 將最後乙個元素的值輸出到*pdata,然後刪除

* 參 數 : int * pdata

* 返回值 : void

*/void pop_back(int* pdata)

} /*!

* 函式名 : push_front

* 功 能 : 將資料插入到鍊錶的最前面

* 參 數 : int ndata

* 返回值 : void

*/void push_front(int ndata)

/*!* 函式名 : pop_front

* 功 能 : 刪除鍊錶最前面的資料, 刪除前,將值輸出到*pdata

* 參 數 : int * pdata

* 返回值 : void

*/void pop_front(int * pdata)

} /*!

* 函式名 : print

* 功 能 : 列印鍊錶中的所有元素

* 返回值 : void

*/void print()

printf("\b]\n");

}};int main()

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法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...