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