数据结构---C语言数据结构3.2.3行编辑程序
来源:互联网 发布:铜陵学院网络教学平台 编辑:程序博客网 时间:2024/06/06 17:25
#include<stdio.h>#include<stdbool.h>#include<Windows.h>#include<stdlib.h>#define STACK_INIT_SIZE 10#define STACKINCREMENT 10typedef char Status;typedef struct stack {char *base;char *top;int stacksize;}SqStack;int InitStack(SqStack *S); //初始化栈void ClearStack(SqStack *S); //清空栈bool StackEmpty(SqStack S); //判断栈是否为空int StackLength(SqStack S); //栈长int Push(SqStack *S, Status e); //入栈int Pop(SqStack *S, Status *e); //出栈int StackTraverse(SqStack S); //遍历栈void DestroyStack(SqStack *S); //销毁栈void LineEdit(); //行编辑子函数int main(){LineEdit();Sleep(10000);return 0;}void LineEdit(){SqStack s;Status value;int popvalue = 0;InitStack(&s);char ch;ch = getchar();while (ch != 'q'){while (ch != 'q'&&ch != '\n') //内层while循环结束代表一行结束,外层代表另一行{switch (ch){case'#':Pop(&s, &value); break; //break不要忘记case'@':ClearStack(&s); break; default:Push(&s, ch);}ch = getchar();}if (ch != 'q')ch = getchar();*(s.top) = '\0';printf("当前行的内容为:%s\n",s.base); //显示每行的内容并清空,若要保存,在这clearstack之前写入文件即可ClearStack(&s);}DestroyStack(&s);}int InitStack(SqStack *S){S->top = (Status*)malloc(sizeof(Status)*STACK_INIT_SIZE);if (S == NULL)return 0;S->base = S->top;S->stacksize = STACK_INIT_SIZE;}void DestroyStack(SqStack *S){free(S->base);S->base = S->top = NULL;S->stacksize = 0;}//栈的空间都没了void ClearStack(SqStack *S){S->top = S->base; //局部变量*(S->top) = 0;}//栈初始化的空间还在,只是指针指向栈底bool StackEmpty(SqStack S){if (S.base = S.top)return true;elsereturn false;}int StackLength(SqStack S){return S.top - S.base;}int GetTop(SqStack S, Status *e){if (S.top != S.base){*e = *(S.top - 1);return 1;}return 0;}int Push(SqStack *S, Status e){int i = StackLength(*S);if ((S->top - S->base) >= S->stacksize){S->base = realloc(S->base, sizeof(Status)*(STACK_INIT_SIZE + STACKINCREMENT));S->top = S->base;while (i--){S->top++;}}if (!S->base)return 0;*(S->top++) = e;return 1;}int Pop(SqStack *S, Status *e){if (S->base == S->top)return 0;*e = *(--S->top);return 1;}int StackTraverse(SqStack S){Status *p = S.top;if (S.base == NULL)return 0;while (p - S.base){p--;printf("%c", *p);}printf("\n");return 1;}
阅读全文
0 0
- 数据结构---C语言数据结构3.2.3行编辑程序
- C语言数据结构——栈、行编辑程序
- 数据结构(C语言)读书笔记7:栈:行编辑程序C代码
- 数据结构-C语言 栈的简单应用——行编辑程序
- C语言数据结构——简单行编辑(课程设计)
- 【数据结构】栈的应用--行编辑程序(c++)
- 学习笔记------数据结构(C语言版)栈应用 行编辑程序
- c语言数据结构(3)
- C语言程序开发宝典-数据结构
- 数据结构题典022:栈的应用——行编辑程序(C语言版)
- 数据结构_行编辑
- 基数排序 C语言数据结构
- 数据结构(C语言实现)
- C语言的数据结构
- C语言数据结构----链表
- C语言的数据结构
- 数据结构c语言学习
- 数据结构(C语言)
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
- 马化腾:新技术在两个产业跨界部分,往往最有机会诞生创新
- C#接口(接口的概念、特点、实现、继承)
- 生成器的创建方法,以及斐波那契数列的生成器的实现
- 九九乘法表
- 数据结构---C语言数据结构3.2.3行编辑程序
- TCP建立连接三次握手和释放连接四次握手
- 关于MySQL中的事务
- 腾讯反诈骗实验室李旭阳:我愿“天下无贼”
- 不再为特斯拉自动驾驶提供技术支持:Mobileye将终止与特斯拉合作
- 专访IBM东京计算神经科学家Yasunori Yamada: 学会理解人类智能的根本形成机制
- 深度解析 | 关于汽车座椅设计我们需要知道什么?
- 关注病患孤儿,腾讯安全携百万网友参与“清理+”行动献爱心
- 中国“无人车技术标准”将出炉,8月份对外发布