C 雙向鍊錶

2021-07-05 01:24:26 字數 1821 閱讀 8150

#includeusing namespace std;

typedef int datatype;

class linknode

friend class slist;

private:

datatype _data;

linknode *_prev;

linknode *_next;

};class slist

void pushback(const datatype &x)

_tail->_next = new linknode(x);

_tail->_next->_prev = _tail;;

_tail = _tail->_next;

} void pushfront(const datatype &x)

_head->_prev = new linknode(x);

_head->_prev->_next = _head;

_head = _head->_prev;

} void popback()

if (_head == _tail)

_tail->_prev->_next= null;

linknode *del = _tail;

_tail = _tail->_prev;

delete del;

} void popfront()

if (_head == _tail)

linknode *del = _head;

_head = _head->_next;

delete del;

} linknode *find(const datatype &x)

dobegin = begin->_next;

} while (begin);

return null;

} //插入到n後

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

//2.插到尾節點之後,更新尾節點

if (n == _tail)

//3.插到中間某個節點之後

linknode *tmp = new linknode(x);

tmp->_next = n->_next;

n->_next->_prev = tmp;

n->_next = tmp;

tmp->_prev = n;

} void erase(linknode *del)

//2.只有乙個結點

if (_head == _tail)

//3.刪除頭結點

if (_head == del)

//4.刪除尾節點

if (del == _tail)

//5.刪除中間的某一結點

del->_prev->_next = del->_next;

del->_next->_prev = del->_prev;

delete del;

} void print()

linknode *begin = _head;

cout << "slist->";

while (begin)

cout << endl;;

}private:

linknode *_head;

linknode *_tail;

};int main()

/*if (ret != null)

*/ op1.print();

system("pause");

return 0;

}

C 雙向鍊錶

部落格介紹了c語言,以及c 的單向鍊錶。那麼我們今天介紹的雙向鍊錶,顧名思義,就是資料本身具備了左邊和右邊的雙向指標。雙向煉表相比較單向鍊錶,主要有下面幾個特點 1 在資料結構中具有雙向指標 2 插入資料的時候需要考慮前後的方向的操作 3 同樣,刪除資料的是有也需要考慮前後方向的操作 那麼,乙個非迴...

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...