数组实现栈和两栈共享空间

来源:互联网 发布:淘宝买的电脑质量如何 编辑:程序博客网 时间:2024/05/04 13:05

大体思路:

结构体里单独设变量top,其用法类似于指针。从而保证其作为栈的基本特性。


先是基本的栈的实现代码:


#include<iostream>#include<cstring>#define MAX 1000using namespace std;typedef struct {int data[MAX];int top;} SQstack;void PUSH(SQstack *s,int data){if(s->top==MAX-1){//判断是否栈满cout<<"ERROR"<<endl;return;} else {s->top++;//栈的数据存储s->data[s->top]=data;return;}}int POP(SQstack *s)//数据读取和删除{if(s->top==-1){cout<<"ERROR"<<endl;return -1;} else {return s->data[(s->top)--];//在返回之后将top的值减一,从而实现删除操作。}}int main(){SQstack stack;//初始化一个stackint a;stack.top=-1;//因为不太会排版的原因··这块应该分成两行cin>>a;PUSH(&stack,a);cout<<stack.data[stack.top]<<endl;cout<<POP(&stack)<<endl;return 0;}

两栈共享空间:

大体思路:

就是设置两个top,分别从-1和MAX处开始储存,实现利用率最大化。

代码:

#include<iostream>#include<cstring>#define MAX 1000using namespace std;typedef struct{int data[MAX];int top1;int top2;} SQdoublestack;void Push(SQdoublestack *s,int number,int data){if(s->top1+1==s->top2){//判断是否栈满cout<<"ERROR"<<endl;return;} else if (number==1){s->top1++;s->data[s->top1]=data;return;} else if (number==2){s->top2--;s->data[s->top2]=data;return;}}int Pop(SQdoublestack *s,int number,int data){if(s->top1+1==s->top2){cout<<"ERROR"<<endl;return -1;} else if (number==1) {return s->data[(s->top1)--];} else if (number==2) {return s->data[(s->top2)++];}}int main(){SQdoublestack stack;//初始化stack.top1=-1;stack.top2=MAX;return 0;}


0 0
原创粉丝点击