#include<iostream>
#include<fstream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef char SElemType; //ElemType 为可定义的数据类型,此设为int类型
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base =new SElemType[MAXSIZE];
if( !S.base ) return OVERFLOW;
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top - S.base==S.stacksize) // 栈满
return ERROR;
*S.top++=e;
return OK;
}
Status Pop(SqStack &S, SElemType &e)
{
if( S.top == S.base ) // 栈空
return ERROR;
e= *--S.top;
return OK;
}
Status GetTop(SqStack S,SElemType &e)
{
if( S.top == S.base ) return ERROR; // 栈空
e=*(S.top-1);
return OK;
}
int main()
{
{
SqStack S;
int choose;
char ch;
cout<<"1. 建立\n";
cout<<"2. 入栈\n";
cout<<"3. 取值\n";
cout<<"4. 出栈\n";
cout<<"0. 退出\n";
choose=-1;
while(choose!=0)
{
cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
if(InitStack(S))
cout<<"成功";
else
cout<<"建立失败";
break;
case 2:
{
fstream file;
file.open("e:\\stack.txt");
if(!file)
{
cout<<"打开失败";
exit(ERROR);
}
while(!file.eof())
{
file>>ch;
if(file.fail())
break;
if(Push(S,ch))
cout<<ch<<"入栈成功";
}
}
break;
case 3:
if(GetTop(S,ch))
cout<<"取值的元素:"<<ch;
break;
case 4:
if(Pop(S,ch))
cout<<"出栈成功:"<<ch;
break;
}
}
return 0;
}
}
#include<fstream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef char SElemType; //ElemType 为可定义的数据类型,此设为int类型
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base =new SElemType[MAXSIZE];
if( !S.base ) return OVERFLOW;
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top - S.base==S.stacksize) // 栈满
return ERROR;
*S.top++=e;
return OK;
}
Status Pop(SqStack &S, SElemType &e)
{
if( S.top == S.base ) // 栈空
return ERROR;
e= *--S.top;
return OK;
}
Status GetTop(SqStack S,SElemType &e)
{
if( S.top == S.base ) return ERROR; // 栈空
e=*(S.top-1);
return OK;
}
int main()
{
{
SqStack S;
int choose;
char ch;
cout<<"1. 建立\n";
cout<<"2. 入栈\n";
cout<<"3. 取值\n";
cout<<"4. 出栈\n";
cout<<"0. 退出\n";
choose=-1;
while(choose!=0)
{
cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
if(InitStack(S))
cout<<"成功";
else
cout<<"建立失败";
break;
case 2:
{
fstream file;
file.open("e:\\stack.txt");
if(!file)
{
cout<<"打开失败";
exit(ERROR);
}
while(!file.eof())
{
file>>ch;
if(file.fail())
break;
if(Push(S,ch))
cout<<ch<<"入栈成功";
}
}
break;
case 3:
if(GetTop(S,ch))
cout<<"取值的元素:"<<ch;
break;
case 4:
if(Pop(S,ch))
cout<<"出栈成功:"<<ch;
break;
}
}
return 0;
}
}