考研数据结构与算法之堆栈的使用(三)数组实现的堆栈
来源:互联网 发布:中国博士与英国知乎 编辑:程序博客网 时间:2024/04/30 06:37
这段时间遇到了一些问题,也查了不少资料,许多问题依然没有得到解决,昨晚睡前突然看到一篇据说是神级代码实现的堆栈,研究了半天没有发现好在哪里,只好贴出来看一看了。
#include <stdio.h>#include <stdlib.h>#define MAX_LENGTH 100#define EMPTY -1#define FULL ( MAX_LENGTH - 1 )typedef struct Stack{char s[MAX_LENGTH];int top;}Stack;void Push(Stack *S, char c);char Pop(Stack *S);char Top(Stack *S);bool Empty(Stack *S);bool Full(Stack *S);void Reset(Stack *S);int main(void){Stack S;Reset(&S);char c;scanf("%c", &c);while( c != '*'){switch(c){case '#':Pop(&S);break;case '!':Reset(&S);break;default:Push(&S,c);}scanf("%c", &c);}int i = 0;while( i != S.top ){printf("%c", S.s[i]);i++;}system("pause");}void Push(Stack *S, char c){S->top++;S->s[S->top] = c;}char Pop(Stack *S){return (S->s[S->top--]);}char Top(Stack *S){return (S->s[S->top]);}bool Empty(Stack *S){return (bool)(S->top == EMPTY);}bool Full(Stack *S){return (bool)(S->top == FULL);}void Reset(Stack *S){S->top = EMPTY;}
我认为这段代码主要存在以下几个问题:
一:容错性太差,如没有考虑到入栈时栈满的情况,出栈前没有确定堆栈中有内容等。
二:函数的命名太随意,如果是与其他数据结构混用时根本无法进行区分。
三:没有对执行结果是否成功进行判断。
此外我在这段代码中加入了一段行编辑程序的demo,结果发现使用‘#’删除文本的功能依然无法实现,有些蛋疼啊。
0 0
- 考研数据结构与算法之堆栈的使用(三)数组实现的堆栈
- 考研数据结构与算法之堆栈的使用(三)利用堆栈匹配括号
- 考研数据结构与算法之堆栈的使用(四)链表实现的堆栈
- 考研数据结构与算法之堆栈的使用(二)利用堆栈实现进制转换
- 考研数据结构与算法之堆栈的建立与使用(一)
- 数据结构与算法-----堆栈-使用数组(顺序结构)实现
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 数据结构与算法之动态数组实现堆栈
- Java数据结构之堆栈-使用数组实现堆栈
- 考研数据结构与算法之利用堆栈实现行编辑程序
- PHP中使用数组实现堆栈数据结构的代码
- 堆栈数据结构的实现~
- 数据结构--堆栈的实现
- 数据结构---->堆栈的使用
- 堆栈的数组实现
- uva 11992 线段树对矩阵进行更新查询
- 第六章实验作业
- 开源 免费 java CMS - FreeCMS1.9 简历管理
- 5月4号----努力
- 海峡钓鱼2014抚顺联谊赛
- 考研数据结构与算法之堆栈的使用(三)数组实现的堆栈
- java 反射的实例
- 别为大公司拼命(译)
- 第六章作业
- 石头剪子布的研究价值
- 台钓中的一些术语介绍
- 第九周作业
- 2014 五一香港行
- 编程是一项死胡同工作