栈的应用举例——行编辑程序

#include<iostream>
#include"SqStack.h"
using namespace std;

void LineEdit(SqStack &S,SqStack &SS)
{
	SElemType e,ch;
	SOP.InitStack(S);
	SOP.InitStack(SS);
	ch=getchar();//从终端接收一个字符
	while(ch!=EOF)//EOF为全文结束符
	{
		if(ch!=EOF&&ch!='\n')
			switch(ch)
		{
			case '#':
				SOP.Pop(S,e);//若是‘#’表明前一个输入字符无效,则应从栈中清除
				break;
			case '@':
				SOP.ClearStack(S);//若是‘@’,表明该行字符均无效,则应清空栈,存储下一行的字符
				break;
			default:
				SOP.Push(S,SS,ch);
		}//switch
		else
		{
			int num=S.top-S.base;
			char *pt=new char[num];//建立一个临时字符数组,用来存放从S中弹出的值
			while(S.top!=S.base)
			{
				SOP.Pop(S,e);//将数据依次弹出栈S,顺便将栈清空用于下一行数据的存储
				*(pt++)=e;//将弹出的数据存放到临时字符数组中
			}//while
			//从后向前输出数组元素,实现对栈S中元素从栈底到栈顶的输出,而SOP.StackTraversal只能实现后进先出
			for(int i=1;i<=num;i++)
				cout<<*(--pt);//pt先减1的原因是在(*p
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值