棧和佇列很早以前就知道有這東西了,兜兜轉轉也終於走到了這一步,都不難理解,總的來說可以看成//煉表頭插法和尾插法的變相使用//,但實現起來也有很多要注意的點
一:棧(後進先出,只有乙個操作點)
棧的實現:順序儲存結構和鏈式儲存結構
1:順序棧:使用陣列實現
#include//輸出為:0,1,2,3,4,5,6,7,8,9
#include//9,8,7,6,5
#define maxsize 100//4
#define true 1
#define false 0
typedef struct
seqstact;
seqstact *create()//建立乙個空棧
int push(seqstact *s,int e)
s->top++;
s->data[s->top]=e;
return true;
}int pop(seqstact *s,int *e)
int gettop(seqstact *s,int *e)//得到此時棧頂元素
else }
int main(void)
printf("\n");
for(i=0;i<5;i++)
printf("\n");
printf("%d",s->data[s->top]);
}
2:鏈棧:同煉表相似,不同的是,鏈棧只能操作頭節點後的節點,既棧頂。
#include#include#define ok 1
#define error 0
typedef struct node//宣告棧的資料結構
lsnode;
typedef struct
lstack;
lstack *create()//建立乙個空棧
int push(lstack *s,int e)
else
return ok;
}int pop(lstack *s)//棧的輸出
else
}int reach_top(lstack *s)//輸出此時的棧頂
int main(void)
for(i=0;i<5;i++)
printf("\n");
x=reach_top(s);
printf("%d\n",x);
}
注:在這裡並沒有考慮滿棧情況,只要malloc還可以申請到空間,就不會出現滿棧情況。
二:佇列(先進先出,有頭尾兩個操作方向,首部插入,尾部刪除)
1.線性儲存(主要採用取餘思想)
隊空:隊尾隊頭相等
隊滿:對尾+1==隊頭
#include#include#define true 1
#define false 0
#define maxsize 10
typedef struct
queue;
queue *create()
int inqueue(queue *ql,int x)
int empty(queue *ql)
int quit(queue *ql,int *e)
return false;
}int main(void)
printf("\n");
for(i=0;i<12;i++)
}
2.鏈隊
#include#include#define true 1
#define false 0
typedef struct node
node;
typedef struct
queue;
queue *create()
int in(queue *ql,int e)//入隊,尾插法
int empty(queue *ql)//判斷是否為空
int push(queue *ql,int e)//出隊
else
return false;
}int main(void)
printf("\n");
for(i=0;i<5;i++)
}
佇列實現棧棧實現佇列
佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同...
佇列實現棧,棧實現佇列
兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...
佇列實現棧以及棧實現佇列
232.用棧實現佇列 簡單 225.用佇列實現棧 簡單 佇列是一種先進先出的資料結構,棧是一種先進後出的資料結構,形象一點就是這樣 這兩種資料結構底層其實都是陣列或者鍊錶實現的,只是 api 限定了它們的特性,那麼今天就來看看如何使用 棧 的特性來實現乙個 佇列 如何用 佇列 實現乙個 棧 首先,佇...