链栈的运用:行编辑程序问题          ——以c语言为例

行编辑程序问题:
输入字符串,当遇到#字符时,自动撤回注销前一个字符,从而实现编辑字符串功能。

#include <stdio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#define sElemType char
typedef struct linkNode{
	sElemType data;//数据域 
	linkNode *next;//指针域 
}*linkStack;
 //判空函数(链栈为空返回1;不为空返回0) 
 int isEmpty(linkStack top){
 	return top==NULL;
 }
 //初始化链栈 
 void initLinkStack(linkStack &top){
 	top=NULL;
 }
 //插入元素到链栈 
 void push(linkStack &top,sElemType val){
 	linkStack newNode=new linkNode[1];
 	newNode->data=val;
	 newNode->next=top; 
	 top=newNode;
 }
 //删除链栈的栈顶元素 
 void pop(linkStack &top,sElemType &val){
 	if(isEmpty(top)){
 		return;
	 }
 	val=top->data;
 	linkStack  tempPtr=top;
 	top=top->next;
 	delete tempPtr;
 } 
 void lineEdit(char *str){
 	linkStack top1;
 	initLinkStack(top1);
 	linkStack top2;
 	initLinkStack(top2);
 	int i=0;
 	while('\0'!=str[i]){
 		if('#'!=str[i]){
 			push(top1,str[i]);
		 } 
 		else if('#'==str[i]) {
 			sElemType e;
 			pop(top1,e);
 			}
 			i++;
	}
		 //为了使字符串正序输出,需要两个栈从而实现正序输出 
		 while(!isEmpty(top1)){
		 	sElemType e;
		 	pop(top1,e);
		 	push(top2,e);
		 }
		 while(!isEmpty(top2)){
		 	sElemType e;
		 	pop(top2,e);
		 	cout<<e;
		 }
	 }
 
 	
 
 	int main(){
 		char str[100];
 		cin>>str;
 		lineEdit(str);
	 } 在这里插入代码片

运行结果截图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值