3.数据结构-c/c++实现栈(详解,栈容量可以动态增长)

news2025/4/26 23:26:17

一.栈的基本介绍

        栈是一种只能够在一端进行插入和删除的顺序表。如下图

空栈:表示不含任何元素的栈

栈顶:表示允许进行插入和删除元素的一端

栈底:表示不允许进行插入和删除元素的一端

即栈是一种后进先出的线性表数据结构

二.栈的常见操作

StackInit:初始化栈

StackDestory:销毁栈

StackPop:删除栈顶元素

StackPush:向栈顶插入元素

StackSize:计算栈中元素并返回

StackEmpty:判断栈是否为空

StackTop:返回栈顶元素

三.各操作代码实现详解

        栈结构的描述代码

typedef int DataType;

typedef struct Stack
{
	DataType* a;    //存储栈的数组
	int Top;        //指向栈顶元素的下标
	int Size;       //栈元素大小
}ST;

3.1 StackInit

        初始化栈只需要对栈中的三个元素依次初始化即可

//初始化栈
void StackInit(ST* st)
{
	assert(st != nullptr);
	st->a = nullptr;
	st->Top = 0;
	st->Size = 0;
}

3.2 StackDestory

//销毁栈
void StackDestory(ST* st)
{
	assert(st != nullptr);
	free(st->a);	//释放数据
	st->Size = 0;	//将容量和栈顶指针置0
	st->Top = 0;
}

3.3 StackPop

//删除数据
void StackPop(ST* st)
{
	assert(st != nullptr);
	assert(st->Top > 0);//有数据才能删除
	st->Top--;//直接让Top减少1即可
}

3.4 StackPush

//插入数据
void StackPush(ST* st, DataType x)
{
	assert(st != nullptr);
	if (st->Size == st->Top)
	{
		int newCapacity = st->Size == 0 ? 4 : st->Size * 2;//设置新空间大小,每次增长两倍
		DataType* tmp = new DataType[newCapacity];
		for (int i = 0; i < st->Size; i++)
		{
			tmp[i] = st->a[i];
		}
		//C语言方式
		//DataType* tmp = (DataType*)realloc(st->a, sizeof(DataType) * newCapacity);
		
		
		if (tmp == nullptr)
		{
			cout << "new error" << endl;
			exit(-1);
		}
		st->a = tmp;
		st->Size = newCapacity;
	}
	st->a[st->Top] = x;
	st->Top++;
}

3.5 StackSize

//计算栈容量大小
int StackSize(ST* st)
{
	assert(st != nullptr);
	assert(st->Top != 0);
	return st->Top;
}

3.6 StackEmpty

//判断栈是否为空
bool StatkEmpty(ST* st)
{
	assert(st->a);
	if (st->Top == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

3.7StackTop

//返回栈顶数据
DataType StackTop(ST* st)
{
	assert(st != nullptr);
	assert(st->Top > 0);          //栈顶有元素才能返回
	return st->a[st->Top - 1];    //位置是Top-1的原因是Top从0开始,表示的是栈顶的后一位
}

四.简单测试

        测试代码1

#define _CRT_SECURE_NO_WARNINGS 1
#include"stack.h"

void test1()
{
	ST st;
	StackInit(&st);
	StackPush(&st, 1);
	StackPush(&st, 9);
	StackPush(&st, 4);
	StackPush(&st, 6);
	StackPush(&st, -1);

	while (!StackEmpty(&st))
	{
		cout << StackTop(&st) << endl;
		StackPop(&st);
	}
}

int main()
{
	test1();
}

运行结果

加入pop

#define _CRT_SECURE_NO_WARNINGS 1
#include"stack.h"

void test1()
{
	ST st;
	StackInit(&st);
	StackPush(&st, 1);
	StackPush(&st, 9);
	StackPop(&st);
	StackPush(&st, 4);
	StackPop(&st);
	StackPush(&st, 6);
	StackPush(&st, -1);

	while (!StackEmpty(&st))
	{
		cout << StackTop(&st) << endl;
		StackPop(&st);
	}
}

int main()
{
	test1();
}

测试结果

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

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

相关文章

尚硅谷Vue入门视频 笔记

尚硅谷视频&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH/?spm_id_from333.999.0.0&vd_sourcecec13bbe100bddfff8baf29d18ed8994 文章目录 模板语法data与el的2种写法MVVM模型事件事件修饰符事件的基本使用 计算属性简写形式 监视属性绑定样式条件渲染列表渲…

多线程篇(可见性 原子性 有序性(可见性))(持续更新迭代)

目录 一、volatile&#xff08;关键字&#xff09;&#xff08;并发编程之美&#xff09; 1. 前言 2. synchronized与volatile关键字对比 3. 什么时候使用volatile关键字 二、volatile&#xff08;关键字&#xff09;&#xff08;深入理解JVM第三版&#xff09; 1. 前言 …

儿童护眼灯哪个牌子好?家长必看这些眼科医生推荐的台灯

如今&#xff0c;学生们经常长时间使用平板电脑、手机和电脑等电子设备&#xff0c;这些设备的屏幕会产生频闪和蓝光辐射&#xff0c;进而影响视力健康。因此&#xff0c;护眼成为了家长们普遍关心的问题。视力疲劳和眼部疾病不仅会影响个人的生活质量&#xff0c;还可能引发长…

申请超长期IP地址SSL证书

随着互联网技术的不断发展&#xff0c;信息安全成为了企业和个人关注的核心议题之一。SSL证书不仅能够加密网站的通信数据&#xff0c;保护用户隐私&#xff0c;还能增强网站的可信度&#xff0c;提升搜索引擎排名等。通常情况下&#xff0c;SSL证书是绑定到域名上的&#xff0…

09--kubernetes持久化存储和StatefulSet控制器

前言&#xff1a;本章是k8s持久化存储的详细笔记&#xff0c;由持久化引申出来的statefulset控制器和无头svc都会在本章有详细记录。 1、K8s持久化存储PV和PVC 在前面文章已经使用卷挂载的方式将pod文件持久化保存在宿主机中&#xff0c;但实际工作中pod往往会以多副本形式存…

骨传导耳机哪个牌子最好?今天安利五款好口碑骨传导耳机!

基于对运动耳机多年的使用和深入研究&#xff0c;我想传达几个朴素却重要的观点&#xff1a;购买前请三思&#xff0c;避免盲目追求潮流。虽然网络上的热门款式引人瞩目&#xff0c;但它们的热度可能转瞬即逝&#xff1b;而高价位的知名品牌耳机&#xff0c;虽然品质有保证&…

SpringBoot整合Thymleaf实现页面静态化

1. 问题需求分析 在做乐优商城时&#xff0c;页面是通过Thymeleaf模板引擎渲染后返回到客户端。当商品详情页数据渲染时&#xff0c;在后台需要大量的数据查询&#xff0c;而后渲染得到HTML页面。在用户访问量大的情况下会对数据库造成压力&#xff0c;并且请求的响应时间过长…

开放式耳机与入耳式耳机相比,有哪些优劣势?权威推荐5个实用好用品牌

​开放式耳机其实相对于入耳式耳机来说区别还是比较大的。开放式耳机现在超火&#xff0c;它们不塞进耳朵&#xff0c;这样长时间戴着耳朵也不会难受&#xff0c;还能保护耳朵卫生&#xff0c;特别受爱运动和喜欢研究耳机的朋友们欢迎。不过市面上的开放式耳机太多了&#xff0…

glsl着色器学习(三)

前面两篇文章已经创建好了顶点着色器和片段着色器并编译成功&#xff0c;下面将创建program(程序)&#xff0c;将着色器链接起来 创建Program const prg gl.createProgram(); gl.attachShader(prg, vertexShader); gl.attachShader(prg, fragmentShader); gl.linkProgram(pr…

【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器

# 创建脚本&#xff0c;可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析&#xff1a; &#xff08;1&#xff09;nginx 1、下载镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ …

LLM大模型教程:大模型技术名词和概念太多了,一手学习笔记

、、 构建AI化需要的知识体系 Semantic Kernel Semantic Kernel是Microsoft推出的一个开源框架&#xff0c;旨在帮助开发者构建和部署AI应用&#xff0c;特别是那些需要理解和生成自然语言的应用。它提供了一种结构化的方式来定义和管理技能&#xff08;Skills&#xff09;&…

【Canvas技法】五种函数化回文边纹纹饰荟萃

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五种函数化回文边纹纹饰荟萃</title><style type"text…

一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

前言 上期写了NL2SQL&#xff0c;相信看过的朋友应该都对现在大模型在数据交互办公层面的探索和发展都十分感兴趣&#xff0c;在此商业化的产品市场上也有很多&#xff0c;比如阿里云的析言GBI&#xff1a; 腾讯云的ChatBI&#xff1a; 像此类的产品可以说是最贴切业务的。 在…

C++笔记16•数据结构:关联式容器map和set•

map和set 1.关联式容器 前面介绍的的是序列式容器&#xff1a;vector、list、deque等容器。这次博客介绍STL新的容器成员&#xff0c;那就是关联式容器&#xff1b;顾名思义关联式容器就是容器存在中的数据之间存在联系&#xff08;关联&#xff09;。与序列式容器不同的是&am…

linux入门系列【1】常用命令

一、简介 linux 基本操作命令,便于我们去使用命令帮助我们去检索和排查问题 二、常用命令 1.磁盘空间排查 1.1 查看磁盘空间分布情况 du -ah .|sort -hr 在对应目录下执行则是查看对应目录的文件分布以及大小情况,一般用于查看某个文件夹目录数据情况 1.2 查看深度层级为…

Java中的Set(如果想知道Java中有关Set的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程中&#xff0c;集合框架&#xff08;Collections Framework&#xff09;是处理数据结构和算法的基础工具之一。它提供了一套强大且灵活的接口和类&#xff0c;用于存储和操作不同类型的数据集合。在这其中&#xff0c;Set接口扮演着一个重要角色。与…

vue-router基本流程及其案例分析

web发展历程 1.后端实现路由 在这个阶段&#xff0c;前端基本上只写界面&#xff0c;也就是html,css,js那些东西&#xff0c;然后在界面中挖槽用来接后端数据&#xff0c;包括路由也由后端负责&#xff0c;在这个阶段中&#xff0c;web开发非常依赖后端&#xff0c;常见的后端…

系列精选 |【梧桐数据库】产品架构层次解析-总述

梧桐数据库中秋特别活动免费领取大闸蟹 抽奖免费领取大闸蟹 以下是正文 在浩瀚的数据世界里&#xff0c;梧桐数据库犹如一颗璀璨的星辰&#xff0c;它的设计如同一首细腻的诗歌&#xff0c;每一个层次都是优美的韵律&#xff0c;为我们构建了一个强大而灵动的数据天地。 梧桐数…

西中区2024年度安全知识竞赛活动方案

为有效预防安全生产事故的发生&#xff0c;深化西中区全体员工对安全生产的认识&#xff0c;切实提升全体人员的安全意识和自我保护能力&#xff0c;夯实安全知识基础&#xff0c;丰富安全文化内涵&#xff0c;推动安全生产工作更加规范化、系统化&#xff0c;根据西中区安全生…

<数据集>遥感航拍飞机和船舶和识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;19973张 标注数量(xml文件个数)&#xff1a;19973 标注数量(txt文件个数)&#xff1a;19973 标注类别数&#xff1a;2 标注类别名称&#xff1a;[ship,plane] 序号类别名称图片数框数1ship17575416292plane239815…