考研数据结构与算法之堆栈的使用(三)数组实现的堆栈
2014-05-04 08:24
429 查看
这段时间遇到了一些问题,也查了不少资料,许多问题依然没有得到解决,昨晚睡前突然看到一篇据说是神级代码实现的堆栈,研究了半天没有发现好在哪里,只好贴出来看一看了。
我认为这段代码主要存在以下几个问题:
一:容错性太差,如没有考虑到入栈时栈满的情况,出栈前没有确定堆栈中有内容等。
二:函数的命名太随意,如果是与其他数据结构混用时根本无法进行区分。
三:没有对执行结果是否成功进行判断。
此外我在这段代码中加入了一段行编辑程序的demo,结果发现使用‘#’删除文本的功能依然无法实现,有些蛋疼啊。
#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,结果发现使用‘#’删除文本的功能依然无法实现,有些蛋疼啊。
相关文章推荐
- 考研数据结构与算法之堆栈的使用(二)利用堆栈实现进制转换
- 考研数据结构与算法之堆栈的使用(四)链表实现的堆栈
- 使用数组实现堆栈和队列
- 使用数组实现堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- PHP使用数组实现堆栈和队列
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- Java数据结构之堆栈-使用数组实现堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 考研数据结构与算法之堆栈的建立与使用(一)
- 用一个数组实现两个堆栈,最大地使用数组的空间,只要有空间就能入栈成功
- PHP中使用数组实现堆栈数据结构的代码
- PHP中使用数组实现堆栈数据结构的代码
- JavaScript学习总结(二十一)——使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- PHP中使用数组实现堆栈数据结构的代码
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 数据结构与算法-----堆栈-使用数组(顺序结构)实现
- 韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理