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