棧的定義(特點:filo)
是一種只能在一端進行插入或刪除操作的線性表。
其中允許進行插入或刪除操作的一端稱為棧頂(top),棧頂由乙個稱為棧頂指標的位置指示器(對於順序棧,就是記錄棧頂元素所在陣列位置標號的乙個整型變數;對於鏈式棧,就是記錄棧頂元素所在結點位址的指標)來指示,它是動態變化的。表的另一端稱為棧底,是固定不變的。棧的插入和刪除操作一般稱為入棧和出棧。
棧的數學性質
當n個元素以某種順序進棧,並且可在任意時刻出棧(在滿足先進後出的前提下),所獲得的元素排列數目n恰好滿足函式catalan()的計算,即
佇列的定義(特點:fifo)
僅允許在表的一端進行插入,在表的另一端進行刪除。可 進行插入的一段稱為隊尾(rear),可進行刪除的一端稱為隊頭(front)。
a.順序棧(較為重要70%)
幾個狀態:1)棧空狀態st.top==-1;2)棧滿狀態st.top==maxsize-1;3)非法狀態(上溢和下溢)/*順序棧定義*/
typedef struct
sqstack;
兩個操作:1)元素x進棧操作++(st.top);st.data[st.top]=x; 2)元素x出棧操作x=st.data[st.top];--(st.top);
b.鏈棧(次要30%)/*初始化棧*/
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出棧
兩個狀態:1)棧空 lst->next==null 2)棧滿 不存在棧滿的情況/*鏈棧結點定義*/
typrdef struct lnode
lnode;
兩個操作: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 ...