棧(stack)和佇列(queue)

2021-08-21 20:59:22 字數 2402 閱讀 4055

棧的定義(特點:filo

是一種只能在一端進行插入或刪除操作的線性表。

其中允許進行插入或刪除操作的一端稱為棧頂(top),棧頂由乙個稱為棧頂指標的位置指示器(對於順序棧,就是記錄棧頂元素所在陣列位置標號的乙個整型變數;對於鏈式棧,就是記錄棧頂元素所在結點位址的指標)來指示,它是動態變化的。表的另一端稱為棧底,是固定不變的。棧的插入和刪除操作一般稱為入棧和出棧。

棧的數學性質

當n個元素以某種順序進棧,並且可在任意時刻出棧(在滿足先進後出的前提下),所獲得的元素排列數目n恰好滿足函式catalan()的計算,即

佇列的定義(特點:fifo

僅允許在表的一端進行插入,在表的另一端進行刪除。可 進行插入的一段稱為隊尾(rear),可進行刪除的一端稱為隊頭(front)。

a.順序棧(較為重要70%)

/*順序棧定義*/

typedef struct

sqstack;

幾個狀態:1)棧空狀態st.top==-1;2)棧滿狀態st.top==maxsize-1;3)非法狀態(上溢和下溢)

兩個操作:1)元素x進棧操作++(st.top);st.data[st.top]=x;    2)元素x出棧操作x=st.data[st.top];--(st.top);

/*初始化棧*/

void initstack(sqstack &st)

/*判斷棧空*/

int isempty(sqstack st)

/*進棧*/

int push(sqstack &st,int x)

/*出棧*/

int pop(sqstack &st,int &x)

/*簡寫形式*/

int stack[maxsize];

int top=-1;

stack[++top]=x; //元素x進棧

x=stack[top--]; //元素x出棧

b.鏈棧(次要30%)

/*鏈棧結點定義*/

typrdef struct lnode

lnode;

兩個狀態:1)棧空 lst->next==null  2)棧滿 不存在棧滿的情況

兩個操作:1)元素(由p指標所指)進棧  p->next=lst->next; lst->next=p;  //頭插法建立鍊錶中的插入操作

2)出棧(出棧元素儲存在x中)p=lst->next; x=p->data; lst->next=p->next; free(p);  //單鏈表的刪除操作

/*鏈棧的初始化*/

void initstack(lnode *&lst)

/*判空*/

int isempty(lnode *lst)

/*進棧*/

void push(lnode *lst,int x)

/*出棧*/

int pop(lnode *lst,int &x)

順序隊

/*順序佇列定義*/

typedef struct

sqqueue; //順序隊型別定義

迴圈佇列的要素

兩個狀態:1)隊空狀態 qu.rear==qu.front    2)隊滿狀態 (qu.rear+1)%maxsize==qu.front

兩個操作:

/*元素x進隊*/

qu.rear=(qu.rear+1)%maxsize;

qu.data[qu.rear]=x;

/*元素x出隊*/

qu.front=(qu.front+1)%maxsize;

x=qu.data[qu.front];

/*初始化佇列*/

void initqueue(sqqueue &qu)

/*判空*/

int isqueueempty(sqqueue qu)

/*進隊*/

int enqueue(sqqueue &qu,int x)

/*出隊*/

int dequeue(sqqueue &qu,int &x)

鏈隊定義

/*1).隊結點型別定義*/

typedef struct qnode

qnode;

/*2).鏈隊型別定義*/

typedef struct

liqueue; //鏈隊型別定義

棧(Stack)和佇列(Queue)

棧和佇列是兩種重要的線性結構。從資料結構角度看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,它們是操作受限的線性表,因 此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向 的程式設...

棧stack 和 佇列queue

stl中,sort的預設排序為less,也就是說從小到大排序 priority queue預設是less,也就說大頂堆 map預設是less,也就說用迭代器迭代的時候預設是小的排在前面 set預設是less,也就是說用迭代器迭代的時候是從小到大排序的。棧和佇列的區別是啥?吃多了拉就是佇列,吃多了吐就...

棧Stack和佇列Queue

1.stack和queue stack是先進後出的,queue是先進先出的。使用方法如下 public class dog public dog string name public void consolename 棧 先進後出 stacks new stack s.push new dog a ...