Data Structure(1) 2021-2-2
数据结构再复习全记录(1)
自今日起再次进行自身数据结构知识点掌握程度的确认以及遗漏排查,视频教程是配合小甲鱼系列食用的,希望能够借此机会督促并充实自己。
关于栈
- 栈的定义
后进先出,操作只能在表尾进行。
表尾叫栈顶(top),表头叫栈底(bottom)。 - 栈的插入、删除操作
插入操作(pop),也叫进栈、压栈、入栈。
删除操作(push),也叫出栈、弹栈。 - 栈的存储结构
- 栈的顺序存储结构
定义:
typedef struct
{
ElemType *base; //base是指向栈底的指针
ElemType *top;
//top指向可以装数据的最顶层的空间,用于标注栈顶的位置
//栈为空时,top = -1
int stackSize; //stackSize是栈当前可使用的最大容量
}sqStack;
创建一个栈:
#define STACK_INIT_SIZE 100
initStack(sqStack *s)
{
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base) //如果申请到的空间是空值,
exit(0); //则申请失败,退出
s->top=s->base; //最开始,栈顶就是栈底
s->stackSize=STACK_INIT_SIZE;
}
入栈操作:
#define STACKINCREMENT 10
//设定每一次增加的空间为10
Push(sqStack *s,ElemType e)
{
//如果栈已满,就要追加空间
if(s->top - s->base >= s->stackSize;)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT)*sizeof(ElemType));
if(!s->base) exit(0);
s->top = s->base + s->stackSize; //设置栈顶
s->stackSize = s->stackSize + STACKINCREMENT; //设置栈的最大容量
}
*(s->top)=e;
s->top++;
}
出栈操作:
Pop(sqStack *s,ElemType *e)
{
if(s->top == s->base) return; //如果栈已空,则直接退出
*e = *--(s->top);
//top是指向栈顶的,并非指向之前最后传入的元素,先将top指针下移,再把这个要出栈的元素放到e这里
}