2021-02-02

Data Structure(1) 2021-2-2

数据结构再复习全记录(1)

自今日起再次进行自身数据结构知识点掌握程度的确认以及遗漏排查,视频教程是配合小甲鱼系列食用的,希望能够借此机会督促并充实自己。

关于栈

  1. 栈的定义
    后进先出,操作只能在表尾进行。
    表尾叫栈顶(top),表头叫栈底(bottom)。
  2. 栈的插入、删除操作
    插入操作(pop),也叫进栈、压栈、入栈。
    删除操作(push),也叫出栈、弹栈。
  3. 栈的存储结构
    在这里插入图片描述
  • 栈的顺序存储结构
    定义:
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这里
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值