C语言实现数据结构栈

C语言数据结构-栈的使用及实例 C语言数据结构——栈的使用及实例 本文主要讨论C语言数据结构的又一重要结构——栈 栈的理论知识 定义和特点 定义:只允许在一端插入和删除的线性表;允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。 特点:后进先出 (LIFO) 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 ​使用通俗的话语形容就像压入子弹夹的子弹,先压入 阅读详情

前言

一、栈的定义

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
在这里插入图片描述

二、栈的实现

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。
在这里插入图片描述在这里插入图片描述所以下面我将用数组来实现栈
代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
// 下面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈
//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;
// 初始化栈
void StackInit(Stack* ps)
{
	STDataType* new = (STDataType*)malloc(sizeof(STDataType) * 4);
	if (new == NULL)
	{
		exit(-1);
	}
	else
	{
		ps->a = new;
		ps->top = 0;
		ps->capacity = 4;
	}
}
// 入栈
void StackPush(Stack* ps, STDataType data)
{
	assert(ps);
	if (ps->top == ps->capacity)
	{
		STDataType* new = (STDataType*)realloc(ps->a,sizeof(STDataType) * (ps->capacity) * 2);
		if (new == NULL)
		{
			exit(-1);
		}
		else
		{
			ps->a = new;
			ps->capacity *= 2;
		}
	}
	ps->a[ps->top] = data;
	ps->top++;
}
// 出栈
void StackPop(Stack* ps)
{
	assert(ps);
	if(ps->top>0)
	(ps->top)--;
}
// 获取栈顶元素
STDataType StackTop(Stack* ps)
{
	assert(ps);
	assert(ps->top>0);
	return ps->a[ps->top - 1];
	
}
// 获取栈中有效元素个数
int StackSize(Stack* ps)
{
	assert(ps);
	return ps->top;
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
int StackEmpty(Stack* ps)
{
	assert(ps);
	return ps->top == 0;
}
// 销毁栈
void StackDestroy(Stack* ps)
{
	free(ps->a);
	free(ps);
}
void StackPrint(Stack* ps)
{
	assert(ps);
	int n = ps->top;
	for (int i = 0;i < n;i++)
	{
		printf("%d ", ps->a[i]);
	}

}

总结

以上就是用C来实现栈 希望对大家有帮助。

迷宫问题——栈实现(C语言)(数据结构与算法) 本文用栈解决迷宫问题,采用C语言实现,包括问题介绍、算法简介、求解过程、代码实现、结果展示。并附有完整代码。 阅读详情

相关推荐

WRF中使用ERA5再分析数据

   本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ......

GIS 8169

C语言初阶数据结构(四)栈(详细图解,简单上手,通俗易懂)

C语言初阶数据结构(四)栈(详细图解,简单上手,通俗易懂)

qq_54469537的博客 4850

无人机上下通信信号解析程序和代码

总的来说,无人机上下行信号解析是无人机系统中非常重要的一部分,它关系到无人机的飞行控制和图像传输能力,对于保障无人机的飞行安全和数据传输质量具有重要作用。3. 读取和解析地面控制中心发送的命令和数据:程序还需要能够读取地面控制中心发送给无人机的命令和数据。1. 读取和解析无人机发送的命令和数据:程序需要能够读取无人机发送的信号,并解析其中的命令和数据。4. 将解析结果传递给无人机:解析地面控制中心发送的命令和数据后,程序需要将解析结果传递给无人机。具体的实现方式可以根据无人机的通信协议和硬件设备来确定。

2401_84824274的博客 2189

数据结构——栈(C语言版)

本文章以理论、图解、代码实战给大家讲清楚数据结构的每个知识点

qq_59774127的博客 7607

MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息

App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示。 app.TextArea.Value = 'Hello Matlab'; Value可以是字符向量、字符向量元胞数组、字符串数组或一维分类数组。这样直接给TextArea赋值,每次赋值都会消除先前的信息,然后显示新的信息。如果想要在app实现保留原有信息、多行信息的输出,在MathWorks官方帮助中心给出了一种方法: cellArrayText{1} = sprintf('%s\n

我是麻瓜喔的博客 1万+

零售-公司间关联交易退货STO的实现方式

零售-公司间关联交易采购 STO-退货 集团公司下经常会出现一家公司和另外一家公司的公司间的关联交易,如跨公司销售、总分公司之间采购,分公司之间的采购等业务;通常公司间采购会采取STO的模式来实现(根据业务模式可以将库存转储统一做成STO的模式,公司间STO、同公司工厂间、同工厂库存地点间 的STO SAP都是支持的); 公司间STO 正向A向B采购都很熟悉,公司间退货STO的其实也是比较普遍的业务现象,很多实施着也将其做成反向的STO(B向A采购),而不是退货STO(A向B,item 选择return的标

weixin_45518759的博客 2832

栈--C语言实现数据结构

本文用详细介绍栈的性质以及用栈来解决问题,内容较为丰富

2201_76062618的博客 4439

告别混乱代码!在Arduino IDE中管理多文件项目的5个必备技巧

本文分享了在Arduino IDE中管理多文件项目的5个必备技巧,帮助开发者告别混乱代码。通过代码分割和模块化设计,提升编译效率、降低内存占用,并实现功能解耦。重点介绍了头文件设计、CPP文件实现、调试技巧和工业级目录结构,让你的Arduino项目像乐高积木一样清晰易维护。

fun88的博客 361

【数据结构】栈的实现详解(c语言)

数据结构栈的分享

m0_72532428的博客 1253

QGC 转发RTSP流 到RTMP服务器

需求: QGC安卓版在接收摄像机RTSP视频流的时候,需要将视频推送到指定的RTMP服务器。 分析: QGC在处理音视频的时候使用了GStreamer这套框架,本身这套框架是跨平台的,所以无需关系环境,只要想到相应位置,添加对应功能代码,然后配置好安卓端的依赖库即可。 添加位置: GstVideoReceiver.cpp -》start函数负责音视频的流的播放,只需在此处添加上封装好的推流函数即可。 同理在stop中添加停止推流功能。 方便起见,可在界面上配置rtmp的推流地.

qthello 2324

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 620

C语言实现数据结构之栈

介绍了栈的概念和结构,然后用C语言实现栈,并完成了一个OJ题:有效的括号

0xFFFFFFFF 1034

从 SAP BTP trial 到第一个 CPI iFlow 的实操路线图

本文介绍了如何从零开始学习SAP CPI(现称SAP Integration Suite中的Cloud Integration能力)。主要内容包括:1)明确学习边界,建议使用SAP BTP trial账号进行个人练习,注意90天有效期限制;2)理解SAP BTP账号模型层级结构(Global Account→Subaccount→Space);3)详细说明申请trial账号流程,推荐选择Singapore区域以避免兼容问题;4)指导如何检查Entitlements和Quotas,强调应专注于SAP Inte

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 166

数据结构——栈c语言顺序表实现

数据结构——栈c语言顺序表实现 栈 特点:只能在表的一端插入删除,后进先出 Stack.h #pragma once #include <stdlib.h> #include <stdio.h> //顺序表实现栈 typedef int Type; typedef struct Stack { Type* _array; size_t _size; size_t...

qq_33431840的博客 399

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言数据结构之栈(链表实现)

C语言数据结构之栈(链表实现) tips:前些天学习了单链表的增删改查,对于双向链表和循环链表而言,无非就是对单链表的指针进行稍微的变换。今天来看看c语言数据结构之栈的实现以及栈的各种操作。 栈的特点是先进后出,后进先出,因此我们很容易联想到去使用单链表的头插法,和头部删除法去实现入栈和出栈的操作。 首先我们来看一下栈的各种操作的实现思路以及具体实现过程 准备工作: 创建栈中元素的结构体 typedef struct tag { int val;//栈(链表)的值,即数据域部分 struct

wrlovesmile的博客 2371

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c语言实现数据结构--栈

栈是一种特殊的线性表,只能在一端进行插入删除操作,具有先进后出的特点。 进行插入删除操作的一端称为栈顶,另一端称为栈底! 接下来就用C语言来实现一下栈的基本操作: 代码实现: /* stack.h文件,包含了栈定义和操作函数的声明。 */ #pragma once #ifndef _STACK_H_ #define _STACK_H_ #define STACK_SIZE 20 typedef ...

博客小站 247

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构:栈C语言实现

目录 栈的概念及结构 栈的实现 栈的初始化 栈的销毁 压栈 出栈 返回栈顶的元素 统计栈中的元素个数 判断栈是否为空 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一段被称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 它这个结构有点类似于子弹的弹夹,我们.

weixin_51885188的博客 1944

数据结构——栈的C语言代码实现

系列文章目录 ` 数据结构——顺序表的C语言代码实现 数据结构——单向不带头非循环链表的C语言代码实现 数据结构——单向不带头循环链表的C语言代码实现 数据结构——单向带头非循环链表的C语言代码实现 数据结构——单向带头循环链表的C语言代码实现 数据结构——双向带头循环链表的C语言代码实现 文章目录系列文章目录前言一、基础知识1.栈的概念(stack)2.栈的种类二、代码实现1.stack.h(1) 引用函数库(2) 定义栈(3) 声明接口函数2.stack.c3.test.c总结 前言 该篇文章主要介绍

AZ10000000的博客 3292

【数据结构】C语言实现栈和队列

{//动态数组实现int size;//栈中有效数据个数//栈的容量}ST;// 链式结构:表示队列{}QNode;// 队列的结构{//队头//队尾int size;//队列元素个数}Queue;

m0_74459723的博客 1127

【数据结构之C语言实现栈】

栈

小峰编程 822

C语言实现栈 —— 数据结构

顺序表实现栈。

微笑,来自内心坚不可摧的自信。 1603

【数据结构】使用C语言 从零实现一个栈的数据结构

我们在栈的底层使用数组进行存储,所以结构中将储存一个数组的指针,和数组的容量(方便初始化和申请内存);另外栈只能操作栈顶的元素,所以结构中还存着一个变量top,表示栈顶的元素。E * array;// 一个数组的指针// 数组的容量int top;// 栈顶的元素再给栈结构的指针起一个别名,便于后续对栈进行操作。

努力!加油!! 543

数据结构:栈的C语言实现

栈(Stack),也称为堆栈,是一种特殊的线性表,其元素的关系是线性关系,其特殊型体现在只能在一端插入和删除元素。栈表现后进先出(LIFO)的特点。 栈的基本运算如下: initStack(Stack &stack):初始化栈 isEmpty(stack):判断栈是否为空 top(Stack stack, StackType& elem):取栈顶元素 push(Stack &am...

Kevin的博客 342

c语言申请栈,[数据结构]C语言栈的实现

有始有终,所以我准备把各种数据结构都讲一次,栈也分顺序存储和链式储存,这里我们选择链式存储来讲,顺序存储没有难度(链式其实也是)作为数据结构中最简单的栈,这里不会说太多,首先考虑一下下面的model: 这就是一个栈,相信你或多或少也了解一些栈的知识,当然如果不了解或者不知道你涉及过那还是继续看吧栈数据结构是后进先出(Last In First Out,简称LIFO),何谓后进先出?你可以把栈视作...

weixin_31953847的博客 537

数据结构——C语言实现栈

C语言实现栈 1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 2.栈的实现: 栈的实现一般可以使用数组或者链表实现,相对...

我爱吃香锅的博客 1037

数据结构之栈和队列C语言模拟实现

栈的特性是先进后出(FILO)。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

qq_65786321的博客 519
上一篇: 模拟实现atoi
下一篇: Leetcode之C语言实现循环队列
1无名之辈1
博客等级 码龄5年 4674粉丝 46原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值