栈的实现与应用
来源:互联网 发布:软件设计师考试真题 编辑:程序博客网 时间:2024/06/05 12:44
1.定义顺序栈,完成栈的基本操作:建空栈、入栈、出栈、取栈顶元素
2. 调用栈的基本操作,将输入的十进制数转换成十六进制数。
3. 调用栈的基本操作,实现行编辑程序,假设“#”为退格符,“@”为退行符。
#include<stdio.h>#include<fstream>#include<malloc.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define TURE 1#define FALSE 0#define OVERFLOW -1#define OK 1#define ERROR 0typedef int Status;typedef char SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;Status InitStack(SqStack &S){//构造一个空栈S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}//InitStackStatus 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;return OK;}//pushStatus Pop(SqStack &S,SElemType &e){if(S.top==S.base)return ERROR;e=*--S.top;return OK;}//PopStatus GetTop(SqStack S,SElemType &e){//若栈不空,则返回S的栈顶元素,并返回OK;否则返回ERRORif(S.top==S.base) return ERROR;e=*(S.top-1); return OK;}//GetTopStatus StackEmpty(SqStack S){//判空if(S.top==S.base){return OK;}return ERROR;}//StackEmptyStatus ClearStack(SqStack &S){//清空栈 if(S.top=S.base) return OK;}//ClearStackStatus DestroyStack(SqStack &S){//销毁栈S.base=NULL;return OK;}//DestroyStackStatus StackTraverse(SqStack S){//遍历while(S.top!=S.base){printf("%d\t",*--S.top);}return OK;}//StatusTraversevoid Conversion(){//对于输入的任意一个非负十进制整数,输出其等值的十六进制数 SqStack S; SElemType N;SElemType e; InitStack(S);scanf("%d",&N);printf("转换后的值为:");while(N){Push(S,N%16);N=N/16;}while(!StackEmpty(S)){Pop(S,e);printf("%d",e);}printf("\n");}//conversionvoid LineEdit(){ SqStack tS;SElemType e;InitStack(tS);fstream f("t.txt",ios::ate|ios::out);if(!f){printf("文件操作失败!");return;}char c=getchar();//从终端接收第一个字符while(c!=EOF){while(c!=EOF && c!='\n'){switch(c){case'#':Pop(tS,e);break;//仅当栈非空时退栈case'@':ClearStack(tS);break;//重置S为空栈default:Push(tS,c);//有效字符进栈,为考虑栈满}c=getchar();//从终端接收下一个字符}SElemType *p=tS.base;while(p!=tS.top)f<<char(*p++);f<<endl;ClearStack(tS);if(c!=EOF)c=getchar();}DestroyStack(tS);printf("输入内容为:\n");f.close();f.open("t.txt",ios::in|ios::out|ios::app);if(!f){printf("文件操作失败!");return;}while(f.get(c))printf("%c",c);printf("\n");f.close();}//LineEditint main(){SqStack S; SElemType N; char c;InitStack(S); printf("请输入要进栈的数:"); while((c=getchar())!='\n'){ Push(S,c); } GetTop(S,c);printf("栈顶元素为:%c\n",c); for(int i=0;S.top!=S.base;i++){ Pop(S,c); printf("栈中第%d元素值为:%c\n",i+1,c);} printf("请输入要转换的数值:\n");Conversion(); LineEdit();return 0;}
1 0
- 栈的实现与应用
- 栈的实现与应用
- nsIIdleService 的实现与应用
- Punching的实现与应用
- 队列的实现与应用
- 红黑树的实现与应用
- 堆的实现与应用
- PJAX的实现与应用
- PJAX的实现与应用
- 订阅与发布的实现与应用
- 栈的表示与实现及栈的应用
- ServletContextListener接口的实现与应用
- SQL injection的实现与应用
- 温昱荐《应用框架的设计与实现》
- 夏桅荐《应用框架的设计与实现》
- 孟岩荐《应用框架的设计与实现》
- COM原理与应用----COM的实现
- 温昱荐《应用框架的设计与实现》
- 蓝桥杯——2的幂次
- JAVA--接口
- accumulate函数
- C++基础——使用字符串作为函数模板的实参
- AxureRP7.0 MAC
- 栈的实现与应用
- 欢迎使用CSDN-markdown编辑器
- 获取SDCard存储大小
- ios多线程编程
- 利用XStream将List<String>转为xml后指定String的别名
- .NET WinForm中 一个 跨线程访问控件的示例(网络)
- 查看SDCard是否被挂载
- UFT的退出函数
- USART 串口 DMA 发送和接收