考研数据结构与算法之堆栈的使用(三)数组实现的堆栈

这段时间遇到了一些问题,也查了不少资料,许多问题依然没有得到解决,昨晚睡前突然看到一篇据说是神级代码实现的堆栈,研究了半天没有发现好在哪里,只好贴出来看一看了。

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值