栈的定义
- 栈: 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。
- 特点:后进先出(LIFO)。
我们来检验一下你是否明白了后进先出,
已知元素的入栈顺序为abcde,则出栈顺序为多少?哪个不可能
答案:edcba ,bcdea,dcbae 可能,cabde 不可能
基本运算:
- 创建空栈:
CreateStack(len)
- 清空栈:
ClearStack(S)
- 判断是否栈空:
EmptyStack(S)
- 判断是否栈满:
FullStack(S)
- 元素进栈:
PushStack(s,x)
- 元素出栈:
PopStack(S)
- 取栈顶元素:
GetTop(S)
栈的存储方式:顺序存储,链式存储
顺序栈:
它是顺序表的一种,具有顺序表相同的存储结构,由数组定义,配合用数组下标表示的栈顶指针tip(相对指针)完成各种操作。
typedef int data_t; //定义栈中数据元素的数据类型
typedef struct{
data_t *data; //用指针指向栈的存储空间
int maxlen; //当前栈的最大元素个数
int top; //指示栈顶位置(数组下标)的变量
}seqstack_t; //顺序栈类型定义
顺序栈基本运算代码实现:
创建空栈:CreateStack(len)
#include"sqstack.h"
sqstack *stack_create(int len){
sqstack *s;
if((s=(sqstack *)malloc(sizeof(sqstack)))==NULL){
printf("malloc false\n");
return NULL;
}
if((s->data=(datatype *)malloc(len *sizeof(datatype))) == NULL){
printf("malloc false\n");
return NULL;
}
s->maxlen = len;
s->top =-1