使用雙向帶頭迴圈鍊錶來表示棧,表頭和表尾均可表示為棧頂,這裡以表頭為棧頂為例。
進行入棧操作(頭插):
進行出棧操作(頭刪):
#include
#include
typedef
int stdatatype;
typedef
struct lstknode listnode;
typedef
struct stack stack;
//建立新的節點
listnode*
createlistnode
(stdatatype val)
//列印節點的值
void
printlistnode
(listnode* node)
//初始化棧
void
stackinit
(stack* st)
//入棧
void
stackpush
(stack* st, stdatatype val)
//出棧
void
stackpop
(stack* st)
//獲取棧頂元素
stdatatype stacktop
(stack* st)
//返回棧的長度
intstacksize
(stack* st)
return k;
}
//判斷棧是否為空
intstackempty
(stack* st)
//銷毀棧
void
stackdestroy
(stack* st)
free
(st->head)
; st->head =
null
; st->top =
null
;}
int
test3()
intmain()
頂指標是在棧操作過程中,有乙個專門的棧指標(習慣上稱它為top),指出棧頂元素所在的位置。
入棧操作:
node->next = top;出棧操作:top->prev = node;
head->next = node;
node->prev = head;
//修改棧頂
top = node;
head->next = next;入棧操作:next->prev = head;
//修改棧頂
top = next;
node->next = top->next ;出棧操作:top->next->prev = node ;
node->prev = top;
top->next = node ;
top->next->next->prev = top ;top->next = top->next->next ;
資料結構 帶頭雙向迴圈鍊錶的實現
在實際工作中用雙向鍊錶又更多一點,因為雙向鍊錶比單鏈表效率更高,雙鏈表結構複雜,但是使用 實現以後會發現結構會帶來 很多優勢,實現反而簡單了 其實寫了單鏈表之後再看雙鏈表其實非常簡單,只不過就是多了乙個指標域而已,再沒有什麼特別難的地方.我們就直接上 吧 dlist.h pragma once in...
資料結構 雙向迴圈帶頭結點鍊錶
前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...
帶頭雙向迴圈鍊錶
首先,我們來看一下帶頭雙向迴圈鍊錶的結構 目錄 帶頭雙向迴圈鍊錶結點的定義 相關操作介面 1 初始化 獲取乙個結點 2 銷毀鍊錶 3 尾插 4 頭插 5 指定元素查詢 6 任意位置插入 7 尾刪 8 頭刪 9 任意位置刪除 10 列印鍊錶 附上完整 typedef int datatype type...