两个栈共用一个连续空间,实现插入与删除。
#include<stdio.h>
#define M 10
int Insert(int stack[],int top[],int i,int item)
{
if(top[0]==top[1]-1)
{
return 0;
}
if(i==1){
stack[++top[0]]=item;
}else{
stack[--top[1]]=item;
}
return 1;
}
int Delete(int stack[],int top[],int i,int &item){
if(top[0]==-1 || top[1]==M){
return 0;
}
item=stack[top[i-1]];
if(i==1){
top[0]--;
}else{
top[1]++;
}
return 0;
}
void input(int stack[],int top[]){
int i;
printf("第一个堆栈:\n");
for(i=top[0];i>-1;i--){
printf("%d ",stack[i]);
}
printf("\n");
printf("第二个堆栈:\n");
for(i=top[1];i<M;i++){
printf("%d ",stack[i]);
}
}
int main()
{
int stack[M],top[2],s;
top[0]=-1,top[1]=M;
for(int i=1;i<5;i++){
int a=Insert(stack,top,1,i);
//printf("%d ",a);
}
for(int i=5;i<9;i++){
int a=Insert(stack,top,2,i);
//printf("%d ",a);
}
input(stack,top);
Delete(stack,top,1,s);
Delete(stack,top,2,s);
printf("\n");
input(stack,top);
return 0;
}