20201012 千锤百炼软工人

今天实现了一个栈

是上课老师给的一道考研题目 两栈共享

#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define OK 1
typedef int SElemType;
using namespace std;
typedef struct
{
int top[2],bot[2]; //栈顶和栈底指针//
int m; //最大容纳个数//
SElemType *V; //栈数组//
}DblStack;
void InitStack(DblStack &s,int i)
{
s.V = new int[s.m];
s.m=i;
s.top[0]=0;
s.top[1]=s.m-1;
cout<<"初始化成功!"<<endl;
}
void Dblpush(DblStack &s,SElemType x,int i)
{
if(i<0||i>1)
{
cout<<"i输入数值错误!"<<endl;
}
else
{
if(s.top[0]==s.top[1]+1)
{
cout<<"栈满!"<<endl;
}
else
{
if(i==0)
{
*(s.V+s.top[i])=x;
s.top[i]++;
cout<<"插入成功!"<<endl;
}
if(i==1)
{
*(s.V+s.top[i])=x;
s.top[i]--;
cout<<"插入成功!"<<endl;
}
}
}
}//把x插入到栈i中//
int Dblpop(DblStack &s,int i,SElemType &x)
{
if(i<0||i>1)
{
cout<<"i输入数值错误!"<<endl;
return 0;
}
else
{
if(i==0)
{
if(s.top[0]==0&&s.top[1]!=0)
{
cout<<"栈空"<<endl;
return 0;
}
else
{
SElemType *p;
x=*(s.V+s.top[i]);
p=(s.V+s.top[i]);
delete p;
s.top[i]--;
return x;
}
}
if(i==1)
{
if(s.top[1]==s.m&&s.top[0]!=s.m)
{
cout<<"栈空"<<endl;
return 0;
}
else
{
SElemType *m;
x=*(s.V+s.top[i]);
m=(s.V+s.top[i]);
delete m;
s.top[i]++;
return x;
}
}
}
}//退掉位于栈i栈顶的元素//
int IsEmpty(DblStack s,int i)
{
if(i==0||i==1)
{
if(i==0)
{
if(s.top[0]==0) return 1;
else return 0;
}
if(i==1)
{
if(s.top[1]==s.m) return 1;
else return 0;
}
}
else{
cout<<"i值错误!"<<endl;
return 0;
}
}//判栈i空否, 空返回1, 否则返回0//
int IsFull(DblStack s)
{
if(s.top[0]+1==s.top[1])
{
cout<<"栈满!"<<endl;
return 1;
}
else
{
cout<<"未满!"<<endl;
return 0;
}
}//判栈满否, 满返回1, 否则返回0
void print(DblStack &s,int i)
{
if(i<0||i>1)
{
cout<<"i输入数值错误!"<<endl;
}
else
{
if(i==0)
{
for(int j=0;j<s.top[i];j++)
{
cout<<*(s.V+j)<<endl;
}
}
if(i==1)
{
for(int j=s.m-1;j>s.top[i];j--)
{
cout<<*(s.V+j)<<endl;
}
}
}
}
int main()
{
DblStack h;
int a,b,c,d,e,f,g;
InitStack(h,6);
Dblpush(h,1,0);
Dblpush(h,2,0);
Dblpush(h,5,1);
Dblpush(h,6,1);
print(h,0);
cout<<endl;
print(h,1);
Dblpop(h,0,b);
Dblpop(h,1,e);
cout<<endl;
print(h,0);
cout<<"第二个"<<endl;
print(h,1);
}

 

原文地址:https://www.cnblogs.com/huangmouren233/p/13805506.html