初学者。如果有误请指正,欢迎联系QQ2684162190
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct s
{
int date[MAXSIZE];
int top1;
int top2;
}SqDoubleStack,*SQ;
//建立空栈
SQ creat()
{
SQ s;
s = (SQ)malloc(sizeof(SqDoubleStack));
s->top1=-1;
s->top2=MAXSIZE;
}
//将元素压入栈中
int Push(SQ s,int e,int StackNum)
{
if(s->top1+1==s->top2)
return 0;
if(StackNum==1)
s->date[++s->top1]=e;
else
s->date[--s->top2]=e;
return 1;
}
int Pop(SQ s,int *e,int StackNum)
{
if(StackNum==1)
{
if(s->top1==-1)
return 0;
*e = s->date[s->top1--];
}
else if(StackNum==2)
{
if(s->top2==MAXSIZE-1)
return 0;
*e=s->date[s->top2++];
}
return 1;
}
int IniStack(SQ s,int temp)
{
int m;
int n,i;
printf("\n请输入要入栈多少个元素:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
if(Push(s,m,temp))
continue;
break;
}
if(i!=n)
return 0;
else
return 1;
}
void destory(SQ *s)
{
s=NULL;
}
void clear(SQ s)
{
s->top1=-1;
s->top2=MAXSIZE;
}
void PRINTF(SQ s)
{
int i;
printf("栈1元素如下:");
for(i=0;i<=s->top1;i++)
printf("%d ",s->date[i]);
printf("\n栈2元素如下:");
for(i=MAXSIZE-1;i>=s->top2;i--)
printf("%d ",s->date[i]);
}
int main()
{
SQ s;
int e;
s=creat();
printf("对栈1进行初始化");
IniStack(s,1);
printf("\n对栈2进行初始化");
IniStack(s,2);
PRINTF(s);
int temp,st,i;
printf("\n请输入要出栈的栈序号");
scanf("%d",&temp);
printf("\n请输入要出栈几个元素");
scanf("%d",&st);
for(i=0;i<st;i++)
{
if(Pop(s,&e,temp))
printf("出栈元素为%d\n",e);
else
{
printf("\n栈%d已经空了",temp);
break;
}
}
PRINTF(s);
clear(s);
destory(&s);
if(s==NULL)
printf("\n栈已经销毁");
return 0;
}