数据结构入门——04栈

news2024/12/22 22:12:49

1.栈

栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈)

允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。

栈的特点 :后进先出LIFO(Last In First Out)。

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上
插入数据的代价比较小。

  • 数组实现栈

  • 链表实现栈

2.栈的数组实现

2.1数组栈的表示

//定长数组栈
typedef int STDataType;
#define N 10
typedef struct Stack
{
    STDataType _a[N];
    int _top; // 栈顶
}Stack;


//动态增长数组栈   //和顺序表类似
typedef int STDataType;
typedef struct Stack
{
    STDataType* _a;
    int _top; // 栈顶
    int _capacity; // 容量
}Stack;

2.2 初始化栈

void StackInit(ST* ps)
{
	assert(ps);
	ps->a = NULL;
	ps->top = 0;
	ps->capacity = 0;
}

2.3 入栈

void StackPush(ST* ps, STDataType x)
{
	assert(ps);
	// 满了扩容
	if (ps->top == ps->capacity)
	{
		int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		ps->a = (STDataType*)realloc(ps->a, newCapacity* sizeof(STDataType));
		if (ps->a == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}

		ps->capacity = newCapacity;
	}

	ps->a[ps->top] = x;
	ps->top++;
}

2.4 出栈

void StackPop(ST* ps)
{
	assert(ps);
	assert(ps->top > 0);
	--ps->top;
}

2.5 获取栈顶元素

STDataType StackTop(ST* ps)
{
	assert(ps);
	assert(ps->top > 0);

	return ps->a[ps->top - 1];
}

2.6 获取栈中有效元素个数

int StackSize(ST* ps)
{
	assert(ps);
	return ps->top;
}

2.7 检测栈是否为空,如果为空返回非零结果,如果不为空返回0

bool StackEmpty(ST* ps)
{
	assert(ps);

	/*if (ps->top > 0)
	{
		return false;
	}
	else
	{
		return true;
	}*/
	return ps->top == 0;
}

2.8 销毁栈

void StackDestory(ST* ps)
{
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->top = 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支持I2C接口、抗干扰性强、14通道触摸按键的电容式触摸芯片-GTX314L

电容式触摸芯片 - GTX314L是具有多通道触发传感器的14位触摸传感器系列,它是通过持续模式提供中断功能和唤醒功能,广泛适用于各种控制面板应用,可直接兼容原机械式轻触按键的处理信号。 GTX314L芯片内部采用特殊的集成电路,具有高…

C++进阶-智能指针

1. 为什么需要智能指针? 下面我们先分析一下下面这段程序有没有什么内存方面的问题?提示一下:注意分析MergeSort函数中的问题。 int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");retur…

【C语言】内存管理

C语言-内存管理 一、C进程内存布局二、栈内存1、存储在栈内存中的参数有哪些?2、栈内存的特点? 三、静态数据四、数据段与代码段五、堆内存 一、C进程内存布局 \qquad 任何一个程序,正常运行都需要内存资源,用来存放诸如变量、常量…

第九届“创客中国”武汉区域赛正式启幕 灵途科技勇夺前三,晋级决赛!

8月8日,第九届“创客中国”武汉区域赛正式启幕,首场聚焦先进制造领域。灵途科技勇夺先进制造领域专场企业组前三名,成功晋级决赛。 “创客中国”大赛是工业和信息化部组织开展的双创赛事活动,以构建产业链协同发展为出发点&#…

Win10 VisualStudio 2022编译ollvm 13.x

VisualStudio配置 1,正常配置C桌面环境 2,在单个组件中选择用于Windows得C Cmake工具 下载OLLVM13.x https://github.com/heroims/obfuscator/tree/llvm-13.x 解压后进入文件夹,命令行输入 cmake -G “Visual Studio 17 2022” -DLLVM_EN…

Java面试--设计模式

设计模式 目录 设计模式1.单例模式?2.代理模式?3.策略模式?4.工厂模式? 1.单例模式? 单例模式是Java的一种设计思想,用此模式下,某个对象在jvm只允许有一个实例,防止这个对象多次引…

依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析

1.引言 1.1为什么要学习依赖倒置原则 在软件开发过程中,我们经常需要对代码进行修改和扩展。如果代码之间的耦合度过高,那么在进行修改或扩展时,可能会对其他部分的代码产生影响,甚至引发错误。这就要求我们在编写代码时&#xf…

【VS Code】 vue项目使用scss显示语法错误、build编译正常

开发vue项目,使用scss老是报这个错误 解决方式: 1.安装vetur 2.在vs code的设置中添加 "files.associations": { "*.vue": "vue" }解决:

线性规划约束一个矩形在Polygon内部

最近在用线性规划,有一个比较有趣的问题,记录一下思路。 如何用线性规划约束一个矩形在Polygon内部? 问题:有如下图蓝色矩形,用线性规划表示出绿色矩形被约束在polygon内部,矩形的中心坐标是(x, y),宽和高…

计算机组成原理---关于乘法电路与除法运算电路的理解

目录 一.乘法电路 1.无符号数乘法运算的硬件实现逻辑: 2.补码1位乘法运算的硬件实现逻辑: 3.无符号阵列乘法器 4.补码阵列乘法器 二.除法电路 1.原码除法运算 2.补码除法运算(不恢复余数法) 本篇是看湖科大与王道视频总结…

35_WebShell管理工具、中国蚁剑AntSword的安装及使用、御剑的使用、后台目录扫描

WebShell管理工具 WebShell 以asp、php、jsp或cgi等网页形式存在的一种代码执行环境主要用于网站和服务器管理由于其便利性和功能强大,被特别修改后的WebShell也被部分人当作网站后门工具使用国内常用的WebShell有海阳ASP木马,Phpspy,c99sh…

<Qt> 系统 - 事件

目录 前言: 一、事件介绍 二、事件的处理 (一)鼠标事件 1. 进入和离开事件 2. 鼠标点击事件 3. 释放事件 4. 双击事件 5. 移动事件 6. 滚轮事件 (二)键盘按键事件 1. 单个按键 2. 组合按键 (…

如何判断监控设备是否支持语音对讲

目录 一、大华摄像机 二、海康摄像机 三、宇视摄像机 一、大华摄像机 注意:大华摄像机支持跨网语音对讲,即设备和服务器可以不在同一网络内,大华设备的语音通道填写:34020000001370000001 配置接入示例: 音频输入…

十日Python项目——第七日(商品购物车)

#前言: 在最近十天我会用Python做一个购物类电商项目,会用到DjangoMysqlRedisVue等。 今天是第六天,主要负责撰写编写关于商品购物车的编写,以及相应的增删改查。若是有不懂大家可以先阅读我的前六篇博客以能够顺承。 若是大家…

Github Copilot 使用技巧

🎯目标读者 本文不包含如何安装 Github Copilot本文介绍了 Github Copilot 使用方法和一些技巧 本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪 但是感觉一直只用了一小部分功能&am…

(第二十七天)

上午 核心:内核中的 ipvs , ipvsadm 1 、安装 ipvsadm [rootnat ~] # yum -y install ipvsadm 2 、配置规则 查看所有的规则,如果已经配置好规则,重启之后也就没有了 [rootnat ~] # ipvsadm -L -n 1 、配置 vip 网卡 &…

服装租赁押金管理-押金原路退回系统开通方法

一、婚纱影楼服装租赁收押金必要性 1. 保障服装的按时归还: - 押金的存在能促使租客按时归还服装,避免因拖延归还影响后续的租赁业务。比如,在一些大型活动期间,服装租赁需求旺盛,如果租客不按时归还,…

HTML样式- CSS——WEB开发系列08

一、HTML 基础概述 HTML 用于创建网页的结构。网页的所有内容&#xff0c;例如文本、图像、链接、表单等&#xff0c;都是通过 HTML 标签来定义的。以下是一个简单的 HTML 文档结构示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><…

matlab 音频音量处理(音量大小按照dB调节)

1 音量(声压级)以分贝(dB)表示的计算公式为: 2 % 已知的 x 值 x = 0:-1:-127; % 在这里填入 x 的具体值% 计算 y %y = 10

浅谈php://filter的妙用

文章目录 分析源码巧用编码与解码利用字符串操作方法 分析源码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename], $content);首先&#xff0c;先分析一下这段代码。 首先他定义了content为’<?php exit;?>‘…