#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct _seqstack
{
int data[MAXSIZE];
int top;
}seqstack;
int Initstack(seqstack *s)//置空棧
{
s->top = -1;
return 0;
}
int Display(seqstack *s)//顯示隊列
{
int n = 0;
if(s->top == -1)
{
printf("隊爲空");
}
else
{
while(s->top >= n)
{
printf("%d ",s->data[n]);
n++;
}
}
return 0;
}
int inqueue(int num,seqstack *s1,seqstack *s2)//進隊列
{
if(s1->top == MAXSIZE - 1)//s1爲滿棧
{
printf("full\n");
}
else
{
if(s2->top != -1)//s1不是滿棧且s2不是空棧
{
while(s2->top > -1)
{
s1->data[++s1->top] = s2->data[s2->top--];
}
s1->data[++s1->top] = num;
}
else//s1不是滿棧且s2是空棧
{
s1->top++;
s1->data[s1->top] = num;
}
}
return 0;
}
int dequeue(seqstack *s1,seqstack *s2)//出隊列
{
if(s2->top != -1)//s2不是空棧,直接彈出棧頂元素
{
printf("%d ",s2->data[s2->top--]);
}
else//如果s2空棧且s1不是空棧,把s1元素倒入s2中
{
if(s1->top != -1)
{
while (s1->top != -1)
{
s2->data[++s2->top] = s1->data[s1->top--];
printf("%d ",s2->data[s2->top--]);
}
}
else//如果s1和s2都是空棧
{
printf("empty\n");
}
}
return 0;
}
int main()
{
int i,j;
int select;
int choice = 1;
int num;
int account;
seqstack s1;
seqstack s2;
Initstack(&s1);//將兩個棧置空
Initstack(&s2);
while(1)
{
printf("選擇操作:1.in 2.out 3.exit \n");
scanf("%d",&select);
switch(select)
{
case 1:
{
printf("輸入元素個數:");
scanf("%d",&account);
printf("輸入數字:");
for(i = 0;i < account;i++)
{
scanf("%d",&num);
inqueue(num,&s1,&s2);
}
printf("隊列中數據如下:");
Display(&s1);
printf("\n");
break;
}
case 2:
{
printf("出隊的元素:");
dequeue(&s1,&s2);
printf("\n");
break;
}
case 3:
exit(0);
break;
}
}
return 0;
}
用兩個棧實現一個隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.