【数据结构】栈的基本概念以及C语言代码实现 | 顺序栈 | 链栈

复制幻灯片到另一个PPT编程 请确保将源PPT文件和目标PPT文件的文件名修改为你实际使用的文件名。运行上述代码后,目标PPT将包含源PPT中的所有幻灯片和形状。这里假设源PPT文件名为"source.pptx",目标PPT文件名为"target.pptx"。方法将每个幻灯片的布局添加到目标PPT中。是一个强大的库,可以用于创建、修改和操作PPT文件。要将一个PPT中的幻灯片复制到另一个PPT,可以使用Python的。这段代码遍历源PPT的每个幻灯片,并使用。步骤 3: 打开源PPT和目标PPT。这将保存修改后的目标PPT文件。 阅读详情

栈和队列

栈和队列都属于线性表

属于"一对一"逻辑关系

栈:“先进后出”

队列:“先进先出”

一 栈

一.什么是栈

看图理解(概念只是辅助理解_理解了才算学会)

在这里插入图片描述

  1. 栈只能从一端存取,另一端是封闭的

  2. 在栈中,无论是存还是取,都必须遵循"先进后出原则"

    ==>栈是一种只能从表的一端存取数据,且遵循"先进后出"原则的线性存储结构

    进栈和出栈

    进栈:将数据存储到站里面

    出栈:将数据从栈中间取出

    栈的实现方法

    栈:"特殊"的线性存储结构

    1 顺序表 ==> 顺序栈(顺序存储结构)

    2 链表 ==> 链栈(链式存储结构)

    栈的应用

    例: 撤销,返回功能 …等等

二.顺序栈

在这里插入图片描述

入栈:

// **元素入栈
// 参数:   存储结构, 栈顶指针, 数据
// 返回值: 栈顶指针(需要知道结束入栈之后栈顶的位置)
int pushElem(int* arr, int top, int val)
{
	arr[++top] = val;  // 初始为-1 数组越界,先移动top位置,后添加数值
	printf("元素%d入栈\n", val);
	return top;
}

出栈:

// **元素出栈
// 参数:   存储结构, 栈顶指针
// 返回值: 栈顶指针
int popElem(int* arr, int top)
{
	// 判断
	if (top <= -1)
	{
		printf("空栈!\n");
		return -1;
	}
	printf("元素%d出栈\n",arr[top]);
	top--;    // 向前移动,但原来的数据还在,无需清除,在添加新元素的时候将它替换
	return top;
}

完整代码+测试:

#include<stdio.h>

// **元素入栈
// 参数:   存储结构, 栈顶指针, 数据
// 返回值: 栈顶指针(需要知道结束入栈之后栈顶的位置)
int pushElem(int* arr, int top, int val)
{
	arr[++top] = val;  // 初始为-1 数组越界,先移动top位置,后添加数值
	printf("元素%d入栈\n", val);
	return top;
}

// **元素出栈
// 参数:   存储结构, 栈顶指针
// 返回值: 栈顶指针
int popElem(int* arr, int top)
{
	// 判断
	if (top <= -1)
	{
		printf("空栈!\n");
		return -1;
	}
	printf("元素%d出栈\n",arr[top]);
	top--;    // 向前移动,但原来的数据还在,无需清除,在添加新元素的时候将它替换
	return top;
}


int main()
{
	// 数组
	int arr[100];
	// top指针(下标)
	int top = -1;
	//入栈
	top = pushElem(arr, top, 1);  //函数返回新的top值赋给top
	top = pushElem(arr, top, 2);
	top = pushElem(arr, top, 3);
	top = pushElem(arr, top, 4);
	top = pushElem(arr, top, 5);
	//出栈
	top = popElem(arr, top);
	top = popElem(arr, top);
	top = popElem(arr, top);
	top = popElem(arr, top);
	top = popElem(arr, top);
	top = popElem(arr, top);
}


// **元素入栈
// 参数:   存储结构, 栈顶指针, 数据
// 返回值: 栈顶指针(需要知道结束入栈之后栈顶的位置)
int pushElem(int* arr, int top, int val);


// **元素出栈
// 参数:   存储结构, 栈顶指针
// 返回值: 栈顶指针
int popElem(int* arr, int top);

在这里插入图片描述

三.链栈

一般将链表的头部作为栈顶

入栈:

// **添加元素
// 参数: 头指针,数据
// 返回值: 头指针
Node* pushElement(Node* stack, int Data) {
	// 1 申请内存
	Node* NewNode = (Node*)malloc(sizeof(Node));
	// 2 初始化节点
	NewNode->data = Data;
	// 3 新的节点作为新的头节点
	NewNode->pnext = stack;
	// 4 头指针指向新的头节点
	stack = NewNode;
	// 5 返回头指针
	return stack;
}

出栈:

// **删除元素
// 参数: 头指针
// 返回值: 头指针
Node* popElement(Node* stack) {
	// 1 判断是否为空栈
	if (stack)
	{
		// 临时指针 保存栈顶(头指针)
		Node* p = stack;
		// 头指针后移
		stack = stack->pnext;  // 与顺序栈一样,无需清除,在添加新元素的时候将它替换
		// 打印数据
		printf("原来栈顶元素:%d  ",p->data);
		// 再次判断是否到了栈顶底部
		if (stack)
		{
			printf("当前栈顶元素:%d\n",stack->data);
		}
		else
		{
			printf("栈顶已经空了!\n");
		}
		// 释放节点
		free(p);
	}
	else
	{
		printf("是一个空栈!\n");
	}
	return stack;
}

完整代码+效果展示

#include<stdio.h>
#include<stdlib.h>

// 节点
typedef struct Node {
	int data;
	struct Node* pnext;
}Node;

// **添加元素
// 参数: 头指针,数据
// 返回值: 头指针
Node* pushElement(Node* stack, int Data) {
	// 1 申请内存
	Node* NewNode = (Node*)malloc(sizeof(Node));
	// 2 初始化节点
	NewNode->data = Data;
	// 3 新的节点作为新的头节点
	NewNode->pnext = stack;
	// 4 头指针指向新的头节点
	stack = NewNode;
	// 5 返回头指针
	return stack;
}


// **删除元素
// 参数: 头指针
// 返回值: 头指针
Node* popElement(Node* stack) {
	// 1 判断是否为空栈
	if (stack)
	{
		// 临时指针 保存栈顶(头指针)
		Node* p = stack;
		// 头指针后移
		stack = stack->pnext;  // 与顺序栈一样,无需清除,在添加新元素的时候将它替换
		// 打印数据
		printf("原来栈顶元素:%d  ",p->data);
		// 再次判断是否到了栈顶底部
		if (stack)
		{
			printf("当前栈顶元素:%d\n",stack->data);
		}
		else
		{
			printf("栈顶已经空了!\n");
		}
		// 释放节点
		free(p);
	}
	else
	{
		printf("是一个空栈!\n");
	}
	return stack;
}

int main()
{
	Node* p = NULL;
	// 入栈
	for (int i = 0; i < 10; i++)
	{
		p = pushElement(p, i);
	}
	// 出栈
	for (int i = 0; i < 11; i++)
	{
		p = popElement(p);
	}
}
FastAPI 高级特性:同异步路由函数、依赖注入与后台任务 在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。 阅读详情

相关推荐

4D毫米波雷达

详解4D成像毫米波雷达

sangba2019的博客 2393

线性结构-栈

文章目录栈和队列一 栈一.什么是栈进栈和出栈栈的实现方法栈的应用二.顺序栈三.链栈 栈和队列 栈和队列都属于线性表 属于"一对一"逻辑关系 栈:“先进后出” 队列:“先进先出” 一 栈 一.什么是栈 看图理解(概念只是辅助理解_理解了才算学会) 栈只能从一端存取,另一端是封闭的 在栈中,无论是存还是取,都必须遵循"先进后出原则" ==>栈是一种只能从表的一端存取数据,且遵循"先进后出"原则的线性存储结构 进栈和出栈 进栈:将数据存储到站里面 出栈:将数据从栈中间取出 栈的实现方法 栈:"特殊

zhuiyizhifengfu的博客 360

生信人的一天~HIFI数据+HIC数据组装基因组

HIFI+HIC数据组装基因组!

qq_43337286的博客 9530

【数据结构】栈的定义与实现(附完整运行代码)

栈的定义,顺序栈链栈的比较,栈的实现

2301_79633555的博客 2778

RK3588上使用PCIE接口的国产千兆网卡YT6801

YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。

荻夜的博客 8217

AI 大模型接口太零散?自建私有模型管理平台统一整合,管理使用超方便!(支持飞牛nas、群晖nas等服务器快速部署)

面对多种 AI 大模型接口难统一、管理繁琐的问题🤯,本文分享一款超实用开源网关工具⚡,可聚合各大模型、自动转接口、支持可视化管理,Docker 一键部署,大幅降低开发与维护成本🚀

XiaoqiangClub的博客 266

栈(stack)入门详解之C语言版

栈(Stack):是一种受限的线性表,即限制在表的一端进行插入和删除操作。栈也称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。 栈顶(top):允许进行插入、删除操作的一端称为栈的栈顶(top),也称为表尾。 栈底(bottom):固定不动的一端,称为栈底(bottom),也称为表头。

sunnyoldboy博客 8233

YOLO26涨点改进 | 细节涨点篇 | 源自SCI一区 | YOLO26引入HWD小波下采样模块,而不会显著增加计算开销,(适合小目标分割任务、小目标检测任务)

本文提出了一种基于Haar小波变换的下采样模块HWD,用于改进YOLO26目标检测性能。HWD模块通过小波变换降低特征图分辨率,同时将空间信息编码到通道维度,有效保留了关键信息。相比传统下采样方法,HWD能显著减少信息不确定性,提升小目标检测精度。实验表明,该模块可无缝集成到CNN架构中,不增加计算开销。文章详细介绍了HWD的实现原理、代码结构以及在YOLO26中的集成方法,并提供了两种改进版yaml配置文件。该创新模块已在多种数据集上验证有效,特别适合语义分割和目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 404

顺序栈操作(C语言代码)

顺序栈是一种使用连续存储空间(如数组)来存储栈中元素的栈结构。它具有后进先出(LIFO, Last In First Out)的特性,即最后入栈的元素会首先出栈。

master_hunter的博客 1384

【Java基础篇】Java重要特性,JDK,JRE,JVM区别和联系,环境变量

JDK使用时的执行流程: • 开发者视角(需要开发java程序):需要安装JDK a. 首先使用JDK调用Tools&Tool APIs(开发者工具)编写好Java程序--xxx.java b. 再次调用Tools&Tool APIs中的javac.exe(编译程序)来编译.java文件(将java文件编译成字节码.class文件) c. 调用java.exe来启动JRE d. 在JRE上运行JAVA字节码(加载特定的.class文件,调用这个class文件中的main方法

Yaoyao2024的博客 2163

高通camx进程ExtensionModule::TeardownOverrideSession类型crash问题分析之一:【死锁导致】

摘要:本文分析了一个在相机老化测试中出现的pthread_cond_wait持锁超时导致的ExtensionModule::TeardownOverrideSession崩溃问题。通过crash堆栈和日志分析,发现close阶段存在近1分钟的无响应期。进一步分析trace文件发现存在多线程死锁:ChiFeature2Graph::GenerateSmartErrorCode和ChiFeature2RequestObject::SetCurRequestState两个线程分别持有不同锁并互相等待对方释放。最终

1110

数据结构之顺序栈的操作(C语言附详细代码与解释)

对数据结构,顺序栈的基本操作的代码与思路解释。

m0_68210771的博客 5714

(十二)深入理解蓝牙BLE之“移植Bluez 5.18源码到嵌入式平台”

在某嵌入式平台进行蓝牙开发,发现上面居然没有btmon,hciattach,hcitool等蓝牙调试工具,无奈之下,只好移植bluez协议栈到目标嵌入式平台,建议移植5.18版本(最新的5.54版本居然hcitool等工具不是默认编译的,需要修改Makefile才可以)。 看到很多讲解移植过程的文章都是需要积分的,觉得写一篇免积分的文章还是有些意义的,欢迎同行来交流。 移植环境:Linux ubuntu 目标平台:sigmastar 星宸科技 配置交叉编译工具链:export PATH=$PATH:

2965

【数据结构与算法】走进数据结构的“时间胶囊”——栈

栈(Stack)是一种只允许在一端进行插入或删除的线性表。这端被称为栈顶(Top),另一端则被称为栈底(Bottom)。栈遵循后进先出(Last In First Out,LIFO)的原则,即最后插入的元素会第一个被删除。首先,我们定义了一个名为STDataType的类型别名,它基于int类型。这个类型别名将用于栈中存储的数据元素。接着,我们定义了一个名为Stack的结构体(通过typedef,我们也可以用ST来引用它)。arr:这是一个指向STDataType类型的指针。

2401_85548793的博客 1258

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

栈入门:链栈和顺序栈的实现操作讲解(C语言)-基础教程

C语言,数据结构栈,顺序栈和链栈的基础知识详细讲解和实现演示,配有动图展示过程。

Mzyh的博客 1498

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言中的栈

1. 栈的定义: 限定仅在表尾进行插入或删除的线性表(后进先出LIFO:Last in , First out)。表头端称为栈底,表尾端称为栈顶。不含元素的空表称为空栈。 2. 栈的建立以及初始化 栈类似于线性表,有两种存储表示方法:顺序栈和链栈。 顺序栈 : 利用一组地址连续的存储单元依次存放字栈底到栈顶的元素,同时附设指针top指示栈顶元素在顺序栈中的位置,top=0为空栈。(栈所需大小难以估计,通常先分派一个基本容量,不够时再追加) 顺序栈的定义:建立一个结构体,包含栈...

m0_63188530的博客 7524

数据结构C语言版-严蔚敏 笔记及源码(3)顺序栈的表示和实现

栈 栈和线性表相似,栈也有两种存储表示方法。 顺序栈 链栈 栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应的,表头端称为栈底(bottom)。栈的修改时按后进先出的原则进行的。因此栈又称为后进先出线性表 顺序栈的操作有: InitStack(&S) #栈的初始化 DestortStack(&S) #销毁栈 ClearStack(&S)

SuperYong的博客 586

C语言实现顺序栈 链栈 循环队列 链队列的基本操作

顺序栈 #include <stdio.h> #include <stdlib.h> #define StackInitSize 10 #define StackIncrement 5 typedef int SElemType; typedef struct { SElemType *base; int top; int stacksize; }SqStack; v...

palepale 1162

数据结构学习笔记(栈、队列)整理与总结

数据结构学习笔记(栈、队列)整理与总结栈栈结构之顺序栈的基本介绍顺序栈的常用操作栈结构之链栈的基本介绍链栈的常用操作队列顺序队列链队列三级目录 栈 栈的概念: 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 结构: 栈结构之顺序栈的基本介绍 概念: 栈是限

weixin_44814867的博客 682

七、数据结构:线性表-栈(后进先出)

1、栈是一种先进后出的顺序表,和顺序表的区别是:顺序表可以操作任意元素,但是栈只能对栈顶元素进行操作,即后进先出原则。 2、栈的操作就只有入栈和出栈两个。 3、实现入栈和出栈 栈的栈顶用top标识,入栈时top加一,出栈时top减一,top为-1时表示栈空。 #include <stdio.h> #define MAX 5 int push(int *a,int top,i...

fanzirong_的博客 1752

数据结构与算法之栈

数据结构与算法之栈 1.栈(Stack)的基本概念 栈是限制仅能在表的一端进行插入和删除操作的线性表。允许插入和删除的一端叫做栈顶,另一端则为栈底。其的特点是后进先出(Last in First Out)。 2.栈的存储结构 栈的顺序存储结构称为顺序栈。顺序栈是利用一组连续的存储单元依次存放元素,通常用一维数组存放栈的元素。栈的顺序结构使用方便,但必须预先分配内存,可能造成存储空间浪费或栈溢出的缺...

鬼谷子的博客 971

数据结构之栈的部分总结

栈 先进后出,(形象的类似为碟盘子,取盘子) 仅允许在栈顶top进行插入、删除操作,另一端不能进行插入、删除操作的称为栈底bottom 顺序栈 # include<stdio.h> # include<stdlib.h> # define MAXSIZE 20; typedef struct{ int a[MAXSIZE]; int top; }SeqStack; ...

qiao_xi的博客 338

C语言-栈

C语言-栈

qq_64831425的博客 423

c语言栈的实现,栈的实现(C语言)

栈的定义栈是一种只能在一端进行插入或删除操作的线性表。运行插入或删除操作的一端称为栈顶,栈的插入和删除一般叫入栈和出栈。栈用顺序存储结构则称为顺序栈,用链式存储结构则称为链栈。特点先进后出,后进先出栈结构以下是个简单的栈结构struct stack{int data[10];int top;};顺序存储结构下面是用顺序存储结构实现的栈源码#include#include#define maxsiz...

weixin_42500195的博客 423

栈的表示和操作

参考书:《数据结构(C语言版|第2版)》严蔚敏 李冬梅 吴伟民 编著 栈是限定仅在表尾进行插入或者删除的线性表。 顺序栈 #include <iostream> #include<stdio.h> #include<stdlib.h> #include<assert.h> using namespace std; typedef int...

qq_43697167的博客 317

数据结构之栈和队列

栈和队列 栈和队列的基本概念 1. 栈的基本概念 1.1 栈的定义   栈是一种只能在一端进行插入或者删除操作的线性表。其中允许进行插入或删除操作的一端称为栈顶(TOP)。栈顶由一个叫作栈顶指针来表示,栈的另外一端称之为栈底,栈底是固定不变的。栈的插入和删除操作一般可以称之为入栈出栈。 1.2 栈的特点   主要特点为先进先出(FILO)。 1.3 栈的存储结构   可以用顺序表和链表来存储栈,分为顺序栈和链栈。 1.4 栈的数学性质   当n个元素以某种顺序进栈时,并且可以在任意时刻出栈,所获得的排列组合

叫我蘑菇先生 507

基础数据结构8:栈和队列

1.栈

小柒的秃头之路 120
上一篇: 【软件工程导论】知识点汇总 | 适用于考试复习 | 轻松通过考试
下一篇: JeecgBoot 使用心得
MuShan-bit
博客等级 码龄5年 538粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

MuShan-bit

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

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

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

打赏作者

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

抵扣说明:

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

余额充值