首页 > 代码库 > 7 线性表-栈-顺序存储的拓展-迎面增长的存储方式
7 线性表-栈-顺序存储的拓展-迎面增长的存储方式
描述:
设有两个栈,S1和S2,都采用顺序栈的存储方式。
两个栈共享一个存储区:【0,……maxsize-1】
目的:可以尽量利用空间,减少溢出的可能,采用栈顶相向、迎面增长的存储方式
PS:要注意判断栈满栈空的检查
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; #define maxsize 100 /*栈结构的定义*/ typedef struct { int stackk[maxsize]; int top[2];//两个栈顶指针top[0]指向stackk左端,top[1]指向stackk右端 int length[2]; } stk; /*入栈*/ /*i表示两个不同的栈,0表示左边的栈,1表示右边的栈 左边的栈每入栈一个元素指针向右移动,右边的栈每入栈一个元素指针向左移动 入栈操作前要判断栈是否为满 */ void initStackk(stk *S) { S->length[0]=0; S->length[1]=0; S->top[0]=-1; S->top[1]=maxsize; } int Push(int i,int x,stk *S) { if(i!=0&&i!=1) { cout<<"wrong stack number"<<endl; return 0; } else if(S->top[0]==(S->top[1]-1)) { cout<<"the stack is filled with data"; return 0; } if(i==0) { S->stackk[++S->top[0]]=x; S->length[i]++; } else { S->stackk[--S->top[1]]=x; S->length[i]++; } cout<<"Successful."<<endl; return 1; } int Pop(int i,int &x,stk *S) { if(i!=0&&i!=1) { cout<<"wrong stack number"<<endl; return 0; } if(S->top[i]==-1||S->top[i]==maxsize) { cout<<"Stack"<<i<<" is null."; return 0; } if(i==0) { x=S->stackk[S->top[i]--]; S->length[i]--; } else { x=S->stackk[S->top[i]++]; S->length[i]--; } cout<<"Successful."<<endl; return 1; } void showtheStack(stk *S) { cout<<"Stack0 : "; for(int i=0; i<S->length[0]; i++) cout<<S->stackk[i]<<" "; cout<<endl; cout<<"Stack1 : "; for(int i=maxsize-1,j=0; j<S->length[1]; j++,i--) { cout<<S->stackk[i]<<" "; } cout<<endl; } int main() { stk *S=(stk*)malloc(sizeof(stk)); initStackk(S); cout<<"test function ‘Push‘ by input 5 data."<<endl; int w=5; while(w--) { cout<<"input a data and which stack that you want to save"; int a,b; cin>>a>>b; if(!Push(b,a,S)) { w++; } } showtheStack(S); cout<<"test function ‘Pop‘ by input the stack number."<<endl; w=3; while(w--) { int out=-1; cout<<"input a stack number (0/1):"; int in; cin>>in; if(!Pop(in,out,S)) { w++; } if(out>0) { cout<<"you Pop the data "<<out<<" successful from stack"<<in<<"."<<endl; } } showtheStack(S); return 0; }
7 线性表-栈-顺序存储的拓展-迎面增长的存储方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。