数据结构 P50 算法实现 栈的应用-行编辑程序
来源:互联网 发布:大数据的由来 编辑:程序博客网 时间:2024/06/05 21:58
#include<conio.h>
using namespace std;
#define STACK_INIT_SIZE 100 //初始存储容量
#define STACKINCERMENT 10 //存储空间增量
struct SqStack //顺序栈的定义
{
char *base; //栈底指针
char *top; //栈顶指针
int stacksize; //当前最大容量
};
bool InitStack(SqStack &S) //构造一个空栈
{
S.base=new char [STACK_INIT_SIZE]; //先给空栈分配一个初始空间
if(!S.base) return 0; //分配失败则返回0
S.top=S.base; //栈顶指针初值指向栈底指针,代表空栈
S.stacksize=STACK_INIT_SIZE; //赋予栈当前的最大容量值
return 1;
}
int GetTop(SqStack S,char &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0; //如果栈为空,则返回0
e=*(S.top-1); //如果栈不为空,则用e返回栈顶元素
return e;
}
bool Push(SqStack &S,char e) //插入元素e为新的栈顶元素
{
if(S.top-S.base>S.stacksize) //如果栈满,则给栈追加存储空间
{
S.base=new char[STACKINCERMENT];
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCERMENT;
}
if(!S.base) return 0; //如果分配失败,则返回0
*S.top=e; //把e的值赋给栈顶指针 ,可合并为 *S.top++=e; (++运算级高于*)
++S.top; //栈顶指针地址加一
return 1;
}
bool Pop(SqStack &S) //若栈不空,则删除S的栈顶元素
{
if(S.top==S.base) //若栈为空,返回0
return 0;
*(--S.top)=NULL; //把栈顶指针指向的值赋给e
return 1;
}
void LineEdit(SqStack s) //利用字符栈s,从终端接收一行并传送至调用过程的数据区
{//1
char ch;
SqStack d; //创建一个字符串d,用于打印输入的字符串
InitStack(s); //构造一个空栈s
InitStack(d); //构造一个空栈d
ch=getchar(); // ch 接收字符
while(ch!=EOF) //文件输入结束时循环停止
{//2
while(ch!='\n')
{//3
switch(ch)
{//4
case'#': //#-退格
Pop(s);
break;
case'@': //@-删除缓冲区所有字符
while(s.base!=s.top)
{Pop(s);}
break;
default:
Push(s,ch); //有效字符进栈
break;;
}//4
ch=getchar();
}//3
while(s.base!=s.top) //由于栈的特性先进后出,利用字符栈d将s里面的字符串接收一遍
{
GetTop(s,ch);
Push(d,ch);
Pop(s);}
while(d.base!=d.top)//打印字符串
{
GetTop(d,ch);
cout<<ch;
Pop(d);
}
cout<<endl;
if(ch!=EOF) ch=getchar();
}//2
}//1
int main()
{
SqStack s; //定义一个栈s
InitStack(s); //初始化栈
LineEdit(s);
while(1){}
delete [] s.base;
return 0;
}
——————————————————————————————————————————
/*算法3.2*/
void LineEdit(SqStack s) //利用字符栈s,从终端接收一行并传送至调用过程的数据区
{//1
char ch;
SqStack d; //创建一个字符串d,用于打印输入的字符串
InitStack(s); //构造一个空栈s
InitStack(d); //构造一个空栈d
ch=getchar(); // ch 接收字符
while(ch!=EOF) //文件输入结束时循环停止
{//2
while(ch!='\n')
{//3
switch(ch)
{//4
case'#': //#-退格
Pop(s);
break;
case'@': //@-删除缓冲区所有字符
while(s.base!=s.top)
{Pop(s);}
break;
default:
Push(s,ch); //有效字符进栈
break;;
}//4
ch=getchar();
}//3
while(s.base!=s.top) //由于栈的特性先进后出,利用字符栈d将s里面的字符串接收一遍
{
GetTop(s,ch);
Push(d,ch);
Pop(s);}
while(d.base!=d.top)//打印字符串
{
GetTop(d,ch);
cout<<ch;
Pop(d);
}
cout<<endl;
if(ch!=EOF) ch=getchar();
}//2
}//1
- 数据结构 P50 算法实现 栈的应用-行编辑程序
- 【数据结构】栈的应用--行编辑程序(c++)
- 学习笔记------数据结构(C语言版)栈应用 行编辑程序
- 数据结构题典022:栈的应用——行编辑程序(C语言版)
- 数据结构-C语言 栈的简单应用——行编辑程序
- 栈的应用之行编辑程序
- 栈的应用之-----行编辑程序
- 栈的应用之行编辑程序
- 栈的应用之行编辑程序
- 栈的应用—行编辑程序
- C_栈的应用----行编辑程序
- 9、数据结构笔记之九栈的应用之行编辑实现
- 考研数据结构与算法之利用堆栈实现行编辑程序
- 栈应用--行编辑程序
- 数据结构:栈的典型应用之一:行编辑(C++)
- 数据结构(8)--栈的应用之行编辑程序、括号匹配检验、数制转换、hanio塔问题
- 数据结构 P48 算法实现 栈的应用举例-数制转换
- 栈的应用举例——行编辑程序
- 安卓开发中的色彩管理
- hadoop搭建之jdk安装
- angular jit and aot
- install mysql on Linux CentOs
- 【SQLSEVER2008连接】使用telnet 127.0.0.1 1433 连接失败问题解决方法
- 数据结构 P50 算法实现 栈的应用-行编辑程序
- Arduino 单片机之SD卡函数封装
- Struts2入门 自动装配 Servlet API
- Idea小技巧 之 折叠代码块(默认折叠所有ctrl+shift+/,展开所有ctrl+*)
- android控件覆盖方法
- 搭建开发基于数字货币的私有链环境
- Struts2入门案例
- C语言实现strcpy函数
- Struts2 第一个入门案例