行编辑程序(基于链栈)
来源:互联网 发布:纳斯卡线条 知乎 编辑:程序博客网 时间:2024/06/13 06:38
行编辑程序只需要在链栈的基础上加上行编辑程序函数:
void LineEdit(Stack *st);//行编辑
函数如下:
void LineEdit(Stack *st)//单个字符处理{int i,j = 0;char ch;ElemType a[100];InitStack(st);cout<<"请输入字符串:"<<endl;ch = getchar();while(ch != '\n'){switch(ch){case '#':if(!StackEmpty(st)){pop(st);}break;case '@':clear(st);break;default:push(st,ch);}ch = getchar();}while(!StackEmpty(st)){ElemType e = GetTop(st);a[j++] = e;pop(st);}for(i = j-1;i>=0;i--){cout<<a[i];}cout<<endl;clear(st);}
具体代码如下:
头文件
#ifndef _STACK_H#define _STACK_H#include<iostream>#include<assert.h>using namespace std;#define ElemType chartypedef struct Node{ElemType data;struct Node *next;}Node,*PNode;typedef struct Stack{PNode top;PNode rear;size_t size;}Stack;int StackEmpty(Stack *st);void InitStack(Stack *st);//初始化bool push(Stack *st,ElemType x);//尾插bool pop(Stack *st);//头删void ShowStack(Stack *st);//打印void clear(Stack *st);//清除void destroy(Stack *st);//摧毁int length(Stack *st);//长度ElemType GetTop(Stack *st);//栈顶元素void LineEdit(Stack *st);//行编辑#endif
函数定义如下
#include "Stack.h"int StackEmpty(Stack *st){if(st->size == 0){return 1;}return 0;}void InitStack(Stack *list)//初始化{Node* s = (Node*)malloc(sizeof(Node));assert(s != NULL);s->next = NULL;list->rear = list->top = s;list->size = 0;}bool push(Stack *st, ElemType x)//尾插{Node *p = (Node*)malloc(sizeof(Node));assert(p != NULL);p->data = x;p->next = st->top->next;st->top->next = p; st->size++;return true;}void ShowStack(Stack *st)//打印{Node *p = st->top->next ;cout<<"NULL"<<endl;while(p != NULL){cout<<p->data <<endl;p = p->next ;}}bool pop(Stack *st)//头删{if(StackEmpty(st)){cout<<"栈已空,不能出栈!"<<endl;return false;}Node *p = st->top->next;if(st->size == 1){free(p);st->top->next = NULL;st->rear = st->top;}else{st->top->next = p->next ;free(p);}st->size--;return true;}ElemType GetTop(Stack *st)//栈顶元素{if(StackEmpty(st)){printf("栈已空,没有栈顶元素!\n");return -1;}return st->top->next->data;}void clear(Stack *st)//清除{Node *p = st->top->next;while(p != NULL){st->top->next = p->next;free(p);p = st->top->next;}st->rear = st->top ;st->size = 0; }void destroy(Stack *st)//摧毁{clear(st);free(st->top);st->top = st->rear = NULL;}int length(Stack *st)//长度{return st->size ;}void LineEdit(Stack *st)//单个字符处理{int i,j = 0;char ch;ElemType a[100];InitStack(st);cout<<"请输入字符串:"<<endl;ch = getchar();while(ch != '\n'){switch(ch){case '#':if(!StackEmpty(st)){pop(st);}break;case '@':clear(st);break;default:push(st,ch);}ch = getchar();}while(!StackEmpty(st)){ElemType e = GetTop(st);a[j++] = e;pop(st);}for(i = j-1;i>=0;i--){cout<<a[i];}cout<<endl;clear(st);}
测试函数
#include "Stack.h"void main(){Stack myStack;InitStack(&myStack);LineEdit(&myStack);}
函数采用单个字符判断的方法进行行编辑操作,操作简单,测试清除,故不进行执行截图。希望大家可以指出问题,谢谢。
0 0
- 行编辑程序(基于链栈)
- 简单的文本行编辑程序——基于栈
- 栈&&行编辑程序
- 栈 行编辑程序
- 栈---行编辑程序
- 栈应用--行编辑程序
- 行编辑程序(数据结构之栈一)
- 【数据结构】栈的应用--行编辑程序(c++)
- 数据结构 栈 行编辑程序(可执行代码)
- 栈的应用之行编辑程序
- 用栈实现一个行编辑程序
- 用栈实现一个行编辑程序
- 栈的应用之-----行编辑程序
- 栈和队列---行编辑程序
- 栈的应用之行编辑程序
- 栈的应用之行编辑程序
- 栈的应用—行编辑程序
- C_栈的应用----行编辑程序
- oracle10g/11g 新特性九(数据库诊断)
- 日志功能--yii::trace()和yii::log()
- Dart on Android语言体验
- LeetCode Path Sum
- TableLayout中stretchColumns、shrinkColumns的用法
- 行编辑程序(基于链栈)
- Windows: 文件搜索工具 -- Everything
- 【Hibernate0002】org.hibernate.HibernateException: Javassist Enhancement failed
- Storm和Hadoop比较
- Android Layout 布局
- memcached学习笔记1(windows 7 64bit 环境下安装memcached)
- 浅谈JAVA设计模式之——策略模式(Strategy)
- centos install pptpd
- 解决LinearLayout中控件不能居右对齐