(top1的初始值为0,top2的初始值为MAXSIZE-1;)
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct Node
{
int data[MAXSIZE];
int top1;
int top2;
}DoubleSQ;
//typedef struct Node *DoubleSQ;
//压栈
int pushStack(DoubleSQ *s,int num,int flag)
{
if(s->top1+1!=s->top2)
{
if(flag==1)
{
s->data[s->top1]=num;
s->top1++;
}
else
{
s->data[s->top2]=num;
s->top2--;
}
return 1;
}
else
return 0;
}
//出栈
int popStack(DoubleSQ *s,int flag)
{
if(flag==1)
{
if(s->top1==0)
return -1;
return s->data[--s->top1];
}
else
{
if(s->top1==0&&s->top2==MAXSIZE-1)
return -1;
return s->data[++s->top2];
}
}
void putStack(DoubleSQ *s)
{
printf("stack1:\n");
int i;
for(i=0;i<s->top1;i++)
printf("%d ",s->data[i]);
printf("\nstack2:\n");
for(i=MAXSIZE-1;i>s->top2;i--)
printf("%d ",s->data[i]);
}
int StackEmpty(DoubleSQ * s)
{
if(0==s->top1&&MAXSIZE-1==s->top2)
return 1;
else
return 0;
}
int getTop(DoubleSQ *s,int flag)
{
if(flag==1&&s->top1!=0)
{
return s->data[s->top1-1];
}
else if(flag==2&&s->top2!=0)
{
return s->data[s->top2+1];
}
else
return -1;
}
int StackLength(DoubleSQ *s,int flag)
{
return (flag==1)?s->top1:s->top2;
}
int main()
{
DoubleSQ * Stack;
Stack = (DoubleSQ *)malloc(sizeof(struct Node));
Stack->top1=0;Stack->top2=MAXSIZE-1;
pushStack(Stack,7,1);
pushStack(Stack,8,1);
putStack(Stack);
pushStack(Stack,9,2);
pushStack(Stack,10,2);
putStack(Stack);
printf("\nStackLength: %d \n",StackLength(Stack,1));
printf("\ngetTop: %d \n",getTop(Stack,1));
printf("\ngetTop: %d \n",getTop(Stack,2));
printf("\npopStack: %d \n",popStack(Stack,1));
printf("\npopStack: %d \n",popStack(Stack,1));
printf("\npopStack: %d \n",popStack(Stack,1));
printf("\npopStack: %d \n",popStack(Stack,2));
return 0;
}