数据结构实验之栈:行编辑器
题目描述
输入
输出
示例输入
whli##ilr#e(s#*s) outcha@putchar(*s=#++);
示例输出
while(*s) putchar(*s++); #include <stdio.h> #include <stdlib.h> #include<malloc.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define OVERFLOW -1 #define ERROR -2 typedef char SElemType; typedef struct {SElemType *base;//栈底指针SElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位 }SqStack; void InitStack(SqStack &S)// 构造一个空栈S {S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base) exit(OVERFLOW);//存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE; } void DestroyStack(SqStack &S)//销毁栈; {S.top=NULL; S.stacksize=0; } void ClearStack(SqStack &S)//清空栈; {S.top=S.base; } void Push(SqStack &S,SElemType e)// 插入元素e为新的栈顶元素 {if(S.top-S.base>=S.stacksize){// 当前存储空间已满,增加分配S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base) exit(OVERFLOW);//存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;//增加存储容量}*S.top++=e; } int Pop(SqStack &S,SElemType &e)//若栈不空,则删除S的栈顶元素,并 //用e返回其值,并返回OK,否则返回//ERROR {if(S.top==S.base) return ERROR;e=*--S.top;return OK; } int GetTop(SqStack S,SElemType &e)//若栈不空,则用e返回S的栈顶元素,并//返回OK,否则返回ERROR {if(S.top==S.base) return ERROR;e=*(S.top-1);return OK; } void PutStack(SqStack &S) {while(S.top>S.base){S.top--;printf("%d",*S.top);}printf("\n"); } void LineEdit()//行编译函数; {char ch,*temp;SqStack S;//栈的定义;InitStack(S);//栈的初始化;ch=getchar();while(ch!=EOF){while(ch!=EOF&&ch!='\n'){switch(ch){case '#':Pop(S,ch);break;//出栈操作;case '@':ClearStack(S);break;//清空栈;default :Push(S,ch);break;//进栈;}ch=getchar();}temp=S.base;//temp指针指向base指针;while(temp!=S.top){printf("%c",*temp);++temp;}ClearStack(S);//清空栈;printf("\n");if(ch!=EOF){ch=getchar();} }DestroyStack(S);//销毁栈; } int main() {LineEdit();return 0; } #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std; #define maxsize 10000 typedef struct Stack {int Size;char *top,*base; } Stack;bool Empty(Stack &s) {if (s.top == s.base){return 1;}return 0; }void Creat(Stack &s)//栈的初始化; {s.base=new char[maxsize];s.top=s.base;s.top++;s.base++;s.Size=maxsize; }void push(Stack &s,char e) {if (s.top-s.base >= s.Size){s.base=(char *)realloc(s.base,2*maxsize*sizeof(Stack));s.Size+=maxsize;///s.top=s.base+s.Size;}s.top++;*s.top=e; }void pop(Stack &s) {if (s.top != s.base){s.top--;} }void print(Stack &s) {while (!Empty(s)){cout<<*s.top;pop(s);} }void out(Stack &s)//栈内元素的输出 {s.base++;while(s.base<=s.top){cout<<*s.base;s.base++;}cout<<endl; }void Clear(Stack &s) {while (!Empty(s)){pop(s);} }void edit(Stack &s,char str[]) {int i;for(i=0; str[i]; i++){if (str[i] == '#' && !Empty(s)){pop(s);//出栈;}else if(str[i] == '@'){Clear(s);//清空栈;}else if (str[i]!='#'&&str[i]!='@'){push(s,str[i]);//进栈;}} } int main() {char str[333];while(gets(str)!=NULL){Stack s;Creat(s);edit(s,str);out(s);}return 0; }
数据结构实验之栈:行编辑器相关推荐
- sdut 1479 数据结构实验之栈与队列九:行编辑器
数据结构实验之栈与队列九:行编辑器 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- sdut 3335 数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...
- sdut-3332 数据结构实验之栈与队列五:下一较大值(一)
数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...
- 2131数据结构实验之栈与队列一:进制转换
数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对 ...
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- sdut 2134 数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 数据结构实验之栈四:括号匹配
数据结构实验之栈四:括号匹配 Description 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. Inp ...
最新文章
- Hadoop通过路径和和链接访问HDFS
- 如何去maven仓库下载jar包
- webform 简单的服务器控件。
- 使用JAVASCRIPT实现弹出框,过一段时间自动消失
- 递归算法详解及测试效率
- java实验类与对象_【实验课件】上机实践2 类与对象
- “深入浅出”是什么导致不能以操作系统用户身份连接到数据库
- amd opencl使用低版本驱动
- 安装VS2008(转)
- 工作11年后一切归零
- 你的年龄体重身高,最好别对这款 app 撒谎
- 互联网服务器信息检索,网络信息检索的一般方法
- 如何解决:error: failed to push some refs to
- CentOs虚拟机硬盘扩容
- Android输入法window类型,android输入法windowSoftInputMode属性详解章
- TypeScript Property ‘XXX‘ does not exist on type ‘never‘.
- 输出魔方阵,所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。例如,三阶魔方阵为
- ddn高性能服务器,DDN是什么,DDN专线的优势详解
- 2021年茶艺师(中级)报名考试及茶艺师(中级)复审考试
- Qt利用JavaScript访问网页元素(百度博客下载例子)
热门文章
- 技能的反面 - 魔方和模仿
- 顶级程序员的心得 Coders at Work (II)
- ssm后台数据是为什么是空值_网易后台开发实习生面试总结
- mysql 字段排重_MySQL 根据单个、多个字段排重
- 关于HTML的盒子的一些小问题
- 添加公共引用目录_原来Word还可以自动生成图片和图表目录!
- linux set权限,Linux 特殊权限set_uid(示例代码)
- mysql安装被打断_Mysql的安装/性能优化/安全加固
- java递归分苹果_递归较难题——分苹果问题
- div中的p标签于img设置同一水平_前端工程师:css中一些需要注意的东西