数据结构与算法——栈(做题笔记)

本文详细介绍了栈的定义、运算特性,重点讨论了栈的实际应用,包括入栈和出栈操作。还列举了栈的基本运算,如初始化、判断栈空、入栈、出栈和读取栈顶元素。同时,文中提到了在软考真题中的栈应用,涉及到将十进制数转换为B进制数的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、栈的定义

栈是限定在表的同一端进行插入或删除操作的线性表。进行插入或删除操作的一端称为栈顶,另一端称为栈底。没有数据元素的栈称为空栈。插入数据元素的栈称为入栈 ,删除数据元素的栈称为出栈
在这里插入图片描述
在这里插入图片描述

2、栈的运算特性:先进后出
3、基于栈结构的特点,在实际应用中,通常只会对栈执行以下两种操作:

向栈中添加元素,此过程被称为"进栈"(入栈或压栈);
从栈中提取出指定元素,此过程被称为"出栈"(或弹栈);

4、栈的基本运算如下:
  • 初始化栈 initStack(S): 创建一个空栈
  • 判断栈空 isEmpty(S): 当栈S为空栈返回True,否则返回false
  • 入栈 Push(S,x): 将元素 x 加入栈顶,并更新栈顶指针
  • 出栈 Pop(S): 将栈顶的元素从栈中删除,并更新栈顶指针
  • 读取栈顶元素top(S):返回栈顶元素的值,但不修改栈顶指针

定义顺序栈:

typedef struct {
   
	int *elem; //栈的存储区
	int max;   //栈的容量,即栈中最多能存放的元素个数
	int top;   //栈顶指针,就是线性表顺序存储结构的 length
}Stack;

约定top用于存放栈顶元素的位置,
top = -1表示空栈,
top=max-1表示栈满
入栈时 top 指针加1 ;出栈时 top减1

创建容量为n的空栈

int InitStack(Stack *S, int n)  //创建容量为n的空栈
{
   
	S->elem = (int *)malloc(n * sizeof(int));  //申请内存,存放n个,一个存放一个整数
	if (S->elem == NULL) return -1;  //返回空指针,则是申请不成功
	S->max = n;     //栈的容量为n
	S->top = 0;		//栈顶的位置
	return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值