您的位置:首页 > 其它

两栈共享空间

2017-07-18 11:11 141 查看
(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: