棧和佇列的模擬實現

2021-10-14 04:14:27 字數 3345 閱讀 5337

#ifndef _stack_h_

#define _stack_h_

#include

#include

#include

typedef

int stdatatype;

typedef

struct stack

stack;

void

stackinit

(stack *ps)

;//初始化

void

stackdestory

(stack *ps)

;//銷毀

void

stackpush

(stack *ps,stdatatype data)

;//入棧

stdatatype stacktop

(stack *ps)

;//獲取棧頂元素

void

stackpop

(stack *ps)

;//出棧

intstacksize

(stack *ps)

;//獲取棧內元素個數

intstackempty

(stack *ps)

;//判斷是否為空

#endif

棧的特性是先進後出,即在棧頂操作,因此我們可以利用順序表進行實現,因為順序表的尾插尾刪的複雜度都為o(1);

void

stackinit

(stack *ps)

//初始化

直接釋放我們的順序表,這是傳1級指標的原因是為了保持介面的一致性,至於外部的野指標問題,我覺得既然呼叫了銷毀介面就應該明白不能再次引用;

void

stackdestory

(stack *ps)

//銷毀

棧是由順序表進行實現的,入棧很簡單,直接在陣列的尾端加入元素即可,只是需要判定下空間的容量是否足夠;

void

stackpush

(stack *ps,stdatatype data)

//入棧

ps->arr[ps->_top++

]= data;

}

我們給定的棧的結構體中函式有順序表的元素個數,因此實現這些結介面是非常方便的;

stdatatype stacktop

(stack *ps)

//獲取棧頂元素

void

stackpop

(stack *ps)

//出棧

intstacksize

(stack *ps)

//獲取棧內元素個數

intstackempty

(stack *ps)

//判斷是否為空

#ifndef _queue_h_

#define _queue_h_

#include

#include

#include

typedef btnode* qdatatype;

typedef

struct qlistnode

qnode;

typedef

struct queue

queue;

void

queueinit

(queue *q)

;//初始化

void

queuedestory

(queue *q)

;//銷毀

void

queuepush

(queue *q,qdatatype data)

;//入隊

void

queuepop

(queue *q)

;//出隊

qdatatype queuefront

(queue *q)

;//獲取隊首元素

qdatatype queueback

(queue *q)

;//獲取隊尾元素

intqueuesize

(queue *q)

;//獲取元素個數

intqueueempty

(queue *q)

;//判斷是否為空

#endif

佇列的性質是先進先出,因此我們用給定尾指標的單向鍊錶來實現。因為陣列的頭插和頭刪的時間複雜度都為o(1),相對來說用鍊錶來實現更佳;

初始化時,頭尾指標都指向null,此時的隊列為空

void

queueinit

(queue *q)

//初始化

由於佇列是鍊錶結構,因此我們需要利用迴圈對其進行銷毀,銷毀後尾指標的位置需要進行更新;

void

queuedestory

(queue *q)

//銷毀

q->_front = q->_rear =

null

;}

入隊即在鍊錶的位段鏈結乙個節點,此時需要判定下當前佇列的頭尾指標是否都指向空;

void

queuepush

(queue *q, qdatatype data)

//入隊

else

}

出隊即通過操作頭指標向後乙個節點進行移動,釋放前面乙個節點,如果全部釋放完了,尾指標需要置空;

void

queuepop

(queue *q)

//出隊

判空後直接通過首尾指標進行獲取;

qdatatype queuefront

(queue *q)

//獲取隊首元素

qdatatype queueback

(queue *q)

//獲取隊尾元素

給乙個計數器變數,通過迴圈的方式獲取節點的個數;

int

queuesize

(queue *q)

//獲取元素個數

return size;

}

判斷是否為空,即頭指標是否指向null;

int

queueempty

(queue *q)

//判斷是否為空

C 棧和佇列的模擬實現

棧 stack 是限定僅在表尾進行插入和刪除操作的線性表 我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料原色的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。實現 template class stack stac...

用棧模擬佇列和佇列模擬棧

棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...

佇列的模擬實現 c語言

test.c define crt secure no warnings 1 include queues.h intmain queues.c include queues.h include include include include include typedef struct mycir...