输入# 删除上一位输入错误的内容
输入@清空已输入的内容
顺序表创建
#include <iostream>
#include <stdlib.h>
#define STACK_INIT_SIZE 100 // 初始长度
#define STACKINCREMENT 10 // 栈满,每次添加的长度
typedef struct
{
char * base; // 栈底指针
char * top; // 栈顶指针
int stacksize; // 当前已分配的内存空间
}SqStack;
using namespace std;
class Stack
{
public:
bool InitStack (SqStack &s); // 构建空栈
bool DestryStack (SqStack &s); // 销毁栈
bool ClearStack (SqStack &s); // 清空栈
bool StcakEmpty (SqStack s); // 判断是否为空栈
int StackLength (SqStack s); // 栈的长度
bool GetTop(SqStack s, char &e); // 返回栈顶
bool Push (SqStack &s, char e); // 入栈
bool Pop (SqStack &s, char &e); // 出栈
};
int main()
{
Stack link; // 实例化类的对象
SqStack s; // 创建字符串
if (link.InitStack(s) ) // 初始化成功
{
char res = ' ',str = ' ';
cout << "字符串:";
cin.get(str);
// 输入数据,进行入栈操作
while (str != EOF && str != '\n')
{
switch (str)
{
case '#':
link.Pop(s, res);
break;
case '@':
link.ClearStack(s);
break;
default:
break;
}
if(str != '#' && str != '@')
link.Push(s,str);
cin.get(str);
}
// 数据出栈
while (!link.StcakEmpty(s))
{
if (link.Pop(s, res))
{
cout << res;
}
}
}
system("pause");
return 0;
}
// 构建空栈
bool Stack::InitStack(SqStack &s)
{
s.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char) );
if (!s.base) return false;
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return true;
}
// 销毁栈
bool Stack::DestryStack(SqStack &s)
{
this->ClearStack(s);
free(s.base);
return true;
}
// 清空栈
bool Stack::ClearStack(SqStack &s)
{
char e;
while (!this->StcakEmpty(s))
{
this->Pop(s,e);
}
return true;
}
// 判断是否为空栈
bool Stack::StcakEmpty(SqStack s)
{
return s.base == s.top;
}
// 栈的长度
int Stack::StackLength(SqStack s)
{
return s.stacksize;
}
// 返回栈顶
bool Stack::GetTop(SqStack s, char &e)
{
if (this->StcakEmpty(s)) return false;
e = *(s.top-1);
return true;
}
// 入栈
bool Stack::Push(SqStack &s, char e)
{
if (s.top - s.base >= s.stacksize) // 栈满
{
s.base = (char *)realloc(s.base, STACKINCREMENT * sizeof(char));
if (!s.base) return false;
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
*s.top++ = e;
return true;
}
// 出栈
bool Stack::Pop(SqStack &s, char &e)
{
if (this->StcakEmpty(s)) return false;
e = *--s.top;
return true;
}
网友评论