栈 是特殊的线性表
栈的定义
 栈的特点:
- 先进后出,后进先出
- 由于空间限制,会因栈满而发生上溢出(进栈一定要判断栈是否已满)
- 出栈要判断栈是否为空
顺序栈的实现
#define MAXSIZE 100
typedef int datatype:
typedef struct {
datatype a[MAXSIZE];
int top;
}sequence_stack;
判断栈是否已满
int full(squence_stack *s)
{
return s->top==MAXSIZE-1;
}
取栈顶元
datatype read(squence_stack *s)
{
if(!empty(s))
return s->a[s->top];
else exit(0);
}
进栈
void push(squence_stack *s,datatype x)
{
if(!full(s))
{
s->data[++s->top]=x
}
else
{
printf("栈已满");
exit(0);
}
}
出栈
void pop(squence_stack *s)
{
if empty(s){printf("栈空,不能出栈!");}
}
else
s->top--;
十进制转八进制数
#include "seqstack.h"
void DtoO(int x)
{
seqstack s;
init(&s);
while(x!=0)
{
push(&s,x%8);
x=x/8;
}
while(!empty(&s))
{
printf("%d",read(&s));
pop(&s);
}
}
表达式求值

- 计算机最适合用后缀表达式
- 后缀表达式特点:
 - 在实际应用中,操作数可能为实数,且两个实数间用空格隔开 那如何将整型转为实数?

|