数据结构 栈 行编辑程序(可执行代码)
来源:互联网 发布:网络通信 编辑:程序博客网 时间:2024/06/07 05:33
一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此,若在行编辑程序中“每接受一个字符即存入用户区”的做法显然是不恰当的。较好的做法是,设立一个输入缓冲区,用以接收用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时及时改正。例如:当用户发现刚刚建入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以输入一个退格符“@”,以表示当前行中的字符均无效。例如,假设从终端接受了这两行字符:whil##ilr#e(s#*s) outcha@putchar(*s=#++)则实际有效的是下列两行:while(*s) putchar(*s++)
#include <stdio.h> #include <stdlib.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef char ElemType; /* ElemType类型根据实际情况而定,这里假设为int */typedef struct{ElemType *base;ElemType *top;int stacksize;//栈能够容纳最大容量 }sqStack; Status initStack(sqStack *s){s->base = (ElemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType));if(!s->base)exit(0);s->top = s->base;s->stacksize = STACK_INIT_SIZE; }void Push(sqStack *s,ElemType e){if(s->top - s->base >= s->stacksize)//满 ,追加空间 {s->base = ( ElemType *)realloc(s->base,( s->stacksize+ STACKINCREMENT )*sizeof(ElemType));if(!s->base)exit(0);s->top = s->base + s->stacksize;//设置栈顶 s->stacksize += STACKINCREMENT;//设置最大容量}*(s->top) = e;s->top++;} void Pop(sqStack *s,ElemType *e){if(s->top == s->base)return;//已经空了 s->top--; *e = *(s->top) ;}Status ClearStack(sqStack *s)//清空一个栈 {s->top = s->base;} Status DestroyStack(sqStack *s){int i,len;len = s->stacksize;for( i=0 ;i < len ; i++ ){free( s->base );s->base++;}s->base = s->top = NULL;s->stacksize = 0; } int StackLen(sqStack s){return s.top - s.base;}void printStack(sqStack *a){sqStack s;s = *a;while(StackLen(s)>0){ElemType b;Pop(&s,&b);printf("%c",b);//注意这里不能用&b }printf("\n");printf("以上为栈里面的数据\n");}int main(){ElemType b;int i =0;//循环变量 ElemType c;//输入的字符 sqStack s;//记录筛选后的栈 initStack(&s);sqStack sNew;//最后显示的必须是把筛选后的栈倒过来initStack(&sNew);c = getchar();while(c!='\n'){while(c!='\n'){switch(c){case '#':Pop(&s,&b); break;case '@':ClearStack(&s); break;default:Push(&s,c); break;}c = getchar();}while(StackLen(s)>0)//把筛选后的栈 倒过来存到sNew里面 {ElemType a;Pop(&s,&a);Push(&sNew,a);}printStack(&sNew);ClearStack(&sNew);c = getchar();}}
阅读全文
0 0
- 数据结构 栈 行编辑程序(可执行代码)
- 数据结构(C语言)读书笔记7:栈:行编辑程序C代码
- 数据结构-栈-顺序栈完整可执行代码
- 数据结构-栈-链栈完整可执行代码
- 行编辑程序(数据结构之栈一)
- 【数据结构】栈的应用--行编辑程序(c++)
- 数据结构-串-完整可执行代码
- 学习笔记------数据结构(C语言版)栈应用 行编辑程序
- C语言数据结构——栈、行编辑程序
- 数据结构 P50 算法实现 栈的应用-行编辑程序
- 数据结构题典022:栈的应用——行编辑程序(C语言版)
- 数据结构---C语言数据结构3.2.3行编辑程序
- 数据结构-队列-顺序存储完整可执行代码
- 数据结构-队列-链式存储完整可执行代码
- 栈&&行编辑程序
- 栈 行编辑程序
- 栈---行编辑程序
- C/C++从代码到可执行程序
- 基础加强-vmware-linux-shell
- Image Formation Pipeline --- 从2D到3D(二)
- 排序
- (二)加密
- N-Queens--LeetCode
- 数据结构 栈 行编辑程序(可执行代码)
- Spring Transaction 嵌套调用
- How To Add Bookmark (mark) In Pycharm
- Servlet学习笔记—request参数接收
- 多线程详解
- Python爬虫 --requests库
- 常量指针与指针常量的区别
- 从零学习Belief Propagation算法(一)
- cmd连接mysql的方法详解,需要的朋友可以参考