資料結構 棧的雙向帶頭迴圈鍊錶實現

2021-10-14 10:04:57 字數 2162 閱讀 8675

使用雙向帶頭迴圈鍊錶來表示棧,表頭和表尾均可表示為棧頂,這裡以表頭為棧頂為例。

進行入棧操作(頭插):

進行出棧操作(頭刪):

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