对于这个问题要想清楚,两个栈的栈顶分别位于数组哪里,一个位于数组尾,一个位于数组末。
#include <stdio.h>
#define N 10
struct DStack{
int data[N];
int top1;
int top2;
};
void Push(struct DStack *Ptrs, int x, int tag) {
if(Ptrs->top2-Ptrs->top1 == 1) {
printf("栈满");
}
else {
if(tag == 1) //利用tag标志来区分是对哪个栈操作
Ptrs->data[++(Ptrs->top1)] = x;
else
Ptrs->data[--(Ptrs->top2)] = x;
}
}
int Pop(struct DStack *Ptrs, int tag){
if(tag == 1)
{
if(Ptrs->top1 == -1) {
printf("栈空");
return -1;
}
else {
return Ptrs->data[Ptrs->top1--];
}
}
else
{
if(Ptrs->top2 == N) {
printf("栈空");
return -1;
}
else {
return Ptrs->data[Ptrs->top2++];
}
}
}
int main() {
struct DStack S;
S.top1 = -1; //初始化两个栈顶
S.top2 = N;
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
Push(&S,i+1,1);
Push(&S,i+1,2);
}
for(int i = 0; i < n; i++)
{
printf("%d ",Pop(&S,1));
}
printf("\n");
for(int i = 0; i < n; i++)
{
printf("%d ",Pop(&S,2));
}
return 0;
}