C 雙向鍊錶

2021-07-04 23:30:24 字數 1663 閱讀 5365

部落格介紹了c語言,以及c++的單向鍊錶。那麼我們今天介紹的雙向鍊錶,顧名思義,就是資料本身具備了左邊和右邊的雙向指標。雙向煉表相比較單向鍊錶,主要有下面幾個特點:

(1)在資料結構中具有雙向指標

(2)插入資料的時候需要考慮前後的方向的操作

(3)同樣,刪除資料的是有也需要考慮前後方向的操作

那麼,乙個非迴圈的雙向鍊錶操作應該是怎麼樣的呢?我們可以自己嘗試一下:

源**:

#include using namespace std;

typedef int datatype;

class linknode

~linknode()

protected:

datatype _data; // 資料

private:

linknode* _prev; // 前驅

linknode* _next; // 後繼

};class list

~list()

{} list(const list& l)

{} list& operator=(const list& l);

public:

void print()

cout<<"null"<_next=new linknode(x);

_tail->_next->_prev=_tail;

_tail=_tail->_next;

} }void popback()

if (_head == _tail)

else

}void pushfront(const datatype& x)

else

}void popfront()

if (_head == _tail)

if(_head != _tail) //鍊錶清空之後的判斷,否則出現記憶體訪問衝突

}//插入

void insert(linknode* pos, const datatype& x)

if(pos == _tail)

else

}//查詢

linknode* find(const datatype& x)

linknode* begin = _head;

while(begin != null)

else

}return null;

cout<<"沒有找到該節點"<_next;

_head->_prev=null;

delete _head->_prev;*/

}else

//del在中

else}}

} }void remove(datatype * x)

//逆置

void reverse() }

private:

linknode* _head;

linknode* _tail;

};void test1()

{ list l1;

l1.pushback(1);

l1.pushback(2);

l1.pushback(3);

l1.pushback(4);

l1.print();

linknode* ret = l1.find(4);

//cout<<"ret:"<_data<

C 雙向鍊錶

includeusing namespace std typedef int datatype class linknode friend class slist private datatype data linknode prev linknode next class slist void p...

C 雙向鍊錶

考慮順序表中總是可以很方便地找到表元素的前驅和後繼,但單鏈表只能找後繼。如要找前驅,必須從表頭開始搜尋。為了克服這一缺點,可採用雙向鍊錶 double linked list 雙向鍊錶經常採用帶頭結點的迴圈鍊錶方式,如下圖所示。檢視動畫演示 圖7.10 帶表頭結點的雙向迴圈鍊錶 假設 指標p指向雙向...

c 雙向鍊錶

雙向鍊錶的遍歷,新增 修改 刪除的操作思路 1 先找到雙向鍊錶的最後這個節點 2 temp.next new datanode 3 newdatanode.pre temp 1 因為是雙向鍊錶,因此,我們可以實現自我刪除某個節點 2 直接找到要刪除的這個節點,比如temp 3 temp.pre.ne...