数据结构之顺序栈的共享

//将123456依次入栈,将45出栈,再将67进栈最后全部出栈依次输出
#include<iostream>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define maxsize 100
using namespace std;
typedef struct node
{
int stack[maxsize];
int top[2];
}seqstack;

void init(seqstack *s)
{
s->top[0]=0;
s->top[1]=maxsize-1;
}
int empty(seqstack s,int flag)
{
switch(flag)
{
case 0:
if(s.top[0]==0)
return 1;
break;
case 1:
if(s.top[1]==maxsize-1)
return 1;
break;
default:
return 0;
}
return 0;

}
int get(seqstack s,int *e,int flag)
{

switch(flag)
{
case 0:
if(s.top[0]==0)
{
cout<<"栈1已空!";
return 0;
}
*e=s.stack[s.top[0]-1];
break;
case 1:
if(s.top[1]==maxsize-1)
{
cout<<"栈2已空!";
return 0;
}
*e=s.stack[s.top[1]+1];
break;
default:
return 0;
}
return 1;

}


int push(seqstack *s,int e,int flag)
{
if(s->top[0]==s->top[1])
{
cout<<"栈已满!";
return 0;
}
switch(flag)
{
case 0:
s->stack[s->top[0]]=e;
s->top[0]++;
break;

case 1:
s->stack[s->top[1]]=e;
s->top[1]--;
break;

default:
return 0;
}

return 1;

}
int pop(seqstack *s,int *e,int flag)
{


switch(flag)
{
case 0:
if(s->top[0]==0)
{
cout<<"栈1已空!";
return 0;
}
s->top[0]--;
*e=s->stack[s->top[0]];
break;

case 1:
if(s->top[1]==maxsize-1)
{
cout<<"栈2已空!";
return 0;
}
s->top[1]++;
*e=s->stack[s->top[1]];

break;

default:
return 0;
}


return 1;

}


int length(seqstack s,int flag)
{
switch(flag)
{
case 0:
return s.top[0];
break;
case 1:
return maxsize-s.top[1]-1;
break;
default :
return 0;
}

}
void clear(seqstack *s)
{
s->top[0]==0;
s->top[1]==maxsize-1;
}

int main()
{
seqstack s;
int i;
int a[]={1,2,3,4,5};
int b[]={11,12,13,14};
int e1,e2;
init(&s);
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
if(push(&s,a[i],0)==0)
{
cout<<"不能入栈";
return 0;
}
}

for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
{
if(push(&s,b[i],1)==0)
{
cout<<"不能入栈";
return 0;
}
}
cout<<"int a[]={1,2,3,4,5}"<<endl;
cout<<"int b[]={11,12,13,14};"<<endl;

cout<<"栈1的栈顶元素为:";
if(get(s,&e1,0)==0)
{
cout<<"栈为空";
return 0;
}
else
{
cout<<e1;
cout<<endl;
}
cout<<"栈2的栈顶元素为:";
if(get(s,&e2,1)==0)
{
cout<<"栈为空";
return 0;
}
else
{
cout<<e2;
cout<<endl;
}



cout<<"栈1中元素个数为:"<<length(s,0);
cout<<endl;
cout<<"栈2中元素个数为:"<<length(s,1);
cout<<endl;

cout<<"栈1出栈元素的序列:";
while(!empty(s,0))
{
pop(&s,&e1,0);
cout<<e1;
cout<<" ";

}
cout<<endl;
cout<<"栈2出栈元素的序列:";
while(!empty(s,1))
{
pop(&s,&e2,1);
cout<<e2;
cout<<" ";
}
cout<<endl;


return 0;
}

原文地址:https://www.cnblogs.com/mykonons/p/6599704.html