算法设计题:
(3) 设从键盘输入 一 整数的序列: a, a 2 , a 瓦…, a n , 试编写算法实现:用栈结构存储输入的整
数, 当 ai != -1 时,将 ai 进栈;当 ai = -1 时,输出栈顶整数并出栈。算法应对异常情况(入栈满
等) 给出相应的信息。
#include <stdio.h>
#include <iostream>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
//初始化
Status InitStack(SqStack &S, int MAXSIZE)
{
S.base = new SElemType[MAXSIZE];
if (!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//进栈
Status Push(SqStack &S, SElemType e)
{
if (S.top - S.base == S.stacksize)
return ERROR;
*S.top++ = e;
return OK;
}
//出栈
Status Pop(SqStack &S, SElemType &e)
{
if (S.base == S.top)
return ERROR;
S.top--;
e = *S.top;
return OK;
}
//遍历栈
void ShowStack(SqStack S)
{
while (S.base != S.top)
{
printf("%d\t", *S.base++);
}
printf("\n");
}
int main(void)
{
int elem;
int MAXSIZE;
printf("请输入栈的MAXSIZE:");
scanf("%d", &MAXSIZE);
getchar();
SqStack S;
InitStack(S, MAXSIZE);
printf("请输入整数序列(以q结尾退出)\n");
while (scanf("%d", &elem))
{
getchar();
if (elem == -1)
{
Pop(S, elem);
printf("读到-1时,栈顶元素出栈elem:%d\n", elem);
}
else
{
if (!Push(S, elem))
{
printf("读到%d整数时,栈已经满了,退出。\n", elem);
break;
}
}
}
printf("遍历栈:");
ShowStack(S);
return 0;
}