用数组实现两个栈,要求最大地利用空间

来源:互联网 发布:linux rar 编辑:程序博客网 时间:2024/05/03 11:40

对于这个问题要想清楚,两个栈的栈顶分别位于数组哪里,一个位于数组尾,一个位于数组末。

#include <stdio.h>#define N 10struct 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;elsePtrs->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;} 


0 0
原创粉丝点击