堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加

C++实现堆栈数据结构(链表描述) 堆栈是一种非常重要的数据结构,可以看成是一种插入和删除均在一端进行的线性表。因此,可以认为堆栈中的元素是“先进后出”。由于堆栈是一种特殊的线性表,而线性表有链表描述和数组描述两种,因此堆栈也可以使用链表描述和数组描述两种方法,同样的,堆栈可以使用线性表的类继承来实现,但是考虑到类继承的方式会降低堆栈的运行效率,本文所实现的堆栈没有考虑这个方式。 一个堆栈应该具备如下的功能: 1.创建一个堆栈; 2... 阅读详情

堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加。堆栈结构可用链表实现。设计一个链表结构需包含两个成员:一个存放数据,一个为指向下一个节点的指针。当每次有一个新数据要放入堆栈时,称为“压入堆栈”,这时动态建立一个链表的节点,并连接到链表的结尾;当每次从堆栈中取出一个数据时,称为“弹出堆栈”,这意味着从链表的最后一个节点中取出该节点的数据成员,同时删除该节点,释放该节点所占的内存。

编程用链表方法实现堆栈数据结构。程序至少应该包含三个函数:

1、主函数 2、压栈操作:将5个数据依次压入堆栈
3、出栈操作:将5个数据依次弹出堆栈(注意:因为后进先出的原因,弹出时是逆序,另外,弹出后要删除该节点内存);

**输入提示:printf(“请输入要压栈的整数:”);
**输入格式:"%d"
**压栈后输出格示:“Push %dth Data:%d\n”
**出栈后输出格式:“Pop %dth Data:%d\n”

程序运行示例:
请输入要压栈的整数:1↙
Push 1th Data:1↙
请输入要压栈的整数:2↙
Push 2th Data:2↙
请输入要压栈的整数:3↙
Push 3th Data:3↙
请输入要压栈的整数:4↙
Push 4th Data:4↙
请输入要压栈的整数:5↙
Push 5th Data:5↙
Pop 5th Data:5↙
Pop 4th Data:4↙
Pop 3th Data:3↙
Pop 2th Data:2↙
Pop 1th Data:1↙

代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct stack
{ 		 	     	 
    int data;
    struct stack *next;
} 		 	     	  STACK;
STACK *head, *pr;
int nodeNum = 0;							/* 堆栈节点数寄存器 */
STACK *CreateNode(int num);
STACK *PushStack(int num);
int PopStack(void);
int main()
{ 		 	     	 
    int pushNum[5] , popNum[5], i;
    for (i = 0; i < 5; i++)
    { 		 	     	 
        printf("请输入要压栈的整数:");
        scanf("%d",&pushNum[i]);
        PushStack(pushNum[i]);
        printf("Push %dth Data:%d\n", i + 1, pushNum[i]);
    }
    for (i = 0; i < 5; i++)
    { 		 	     	 
        popNum[i] = PopStack();
        printf("Pop %dth Data:%d\n", 5 - i, popNum[i]);
    }
    return 0;
} 		 	     	 
/* 函数功能:生成一个新的节点,并为该节点赋初值,返回指向新的节点的指针 */
STACK *CreateNode(int num)
{ 		 	     	 
    STACK *p;
    p = (STACK *)malloc(sizeof(STACK));
    if (p == NULL)
    { 		 	     	 
        printf("No enough memory!\n");
        exit(0);
    }
    p->next = NULL;				/* 为新建的节点指针域赋空指针 */
    p->data = num;	       			/* 为新建的节点数据区赋值 */
    return p;
} 		 	     	 
/*	函数功能:将整型变量num的值压入堆栈,返回指向链表新节点的指针 */
STACK *PushStack(int num)
{ 		 	     	 
    if (nodeNum == 0) /* 若为首节点,则保留该节点地址在head中*/
    { 		 	     	 
        head = CreateNode(num);
        pr = head;
        nodeNum++;	/* 堆栈节点数寄存器+1 */
    }
    else             /* 若不是首节点,则将新建节点连到链表的结尾处 */
    { 		 	     	 
        pr->next = CreateNode(num);
        pr = pr->next;
        nodeNum++;	/* 堆栈节点数寄存器+1 */
    }
    return pr;
} 		 	     	 
/*	函数功能:将当前栈顶的数据弹出堆栈,返回从堆栈中弹出的数据 */
int PopStack(void)
{ 		 	     	 
    STACK *p = head;
    int result;
    for (;;)
    { 		 	     	 
        if (p->next == NULL) 	/* 查找最后一个节点 */
        { 		 	     	 
            break;
        }
        else
        { 		 	     	 
            pr = p;			    /* 记录最后一个节点的前一个节点的地址 */
            p = p->next;
            nodeNum--;		    /* 堆栈节点数寄存器-1 */
        }
    }
    pr->next = NULL;	         /* 将末节点的前一个节点置成末节点 */
    result = p->data;
    free(p);
    return result;
}
C#数据结构之堆栈(Stack)实例详解 本文实例讲述了C#数据结构之堆栈(Stack)。分享给大家供大家参考,具体如下: 堆栈(Stack)最明显的特征就是“先进后出”,本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点。 相对前面学习过的顺序表、链表不同的地方在于:Stack把所有操作限制在”只能在线性结构的某一端”进行,而不能在中间插入或删除元素。下面是示意图: 从示意图中可以看出,堆栈有二种实现方式:基于数组的顺序堆栈实现、类似链表的链式堆栈实现 先抽象堆栈的接口IStack: namespace 栈与队列 { public interface IStack { 立即下载

相关推荐

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1147

堆栈,链式(个人记录)

在计算机中有一个重要的概念——堆栈。堆栈是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有在后放进筒中的数据都取出后,先放进去的数据才能被取出,这称为“后进先出”。堆栈的长度可以随意增加。堆栈结构可以用链表实现。 #include <stdio.h> #include <stdlib.h> typedef struct stack stack; struct stack{ int data; stack *ne...

SY_XLR的博客 665

从数据到特征:基于CAT12的MRI图像预处理实战指南

本文详细介绍了使用CAT12工具进行MRI图像预处理的完整实战流程。从数据获取、环境搭建到核心的AC-PC校正、组织分割、空间标准化与调制,逐步解析如何将原始脑影像数据转化为可用于机器学习的标准化特征图。重点阐述了预处理作为脑影像分析‘生命线’的重要性,并提供了避坑指南与自动化脚本建议,帮助研究者构建高质量的阿尔茨海默症分类模型输入特征。

weixin_29065959的博客 310

用链表实现堆栈

堆栈(stack)是一组相同数据类型数据的集合,且拥有后入先出(last in first out)的特性,即堆栈的所有操作都是在顶端进行的。堆栈有五个基本操作: Create 创建一个空堆栈。 Push 把数据压入堆栈顶端,并返回新堆栈。 Pop 从堆栈顶端弹出数据,并返回新堆栈。 Empty 判断堆栈是否为空堆栈,是空则返回tru

Gordennizaicunzai的博客 1477

别再手动备份了!用Python脚本批量导出华为/华三交换机配置(附完整代码)

本文详细介绍了如何使用Python脚本实现华为/华三交换机配置的自动化备份,大幅提升网络运维效率。通过paramiko库建立SSH连接,结合pandas处理设备清单,实现配置的批量导出与规范化存储,解决传统手动备份耗时易错的问题。

weixin_28737603的博客 449

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5524

算法数据结构基础——堆栈

堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。我们把栈中允许插入和删除的一端称为「栈顶(top)」;另一端则称为「栈底(bottom)」。当表中没有任何数据元素时,称之为「空栈」。「插入操作」和「删除操作」。栈的插入操作又称为「入栈」或者「进栈」。栈的删除操作又称为「出栈」或者「退栈」。简单来说,栈是一种「后进先出(Last In First Out)」的线性表,简称为「LIFO 结构」。我们可以从两个方面来解释一下栈的定义:第一个方面是。

白话机器学习 7740

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1552

C语言——动态数据结构,编程用链表方法实现堆栈数据结构。堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去

C语言动态数据结构

WZY22502701的博客 924

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

【MATLAB代码】雷达观测目标跟踪模型|H-infinity Filter(H无穷大滤波)与EKF(扩展卡尔曼滤波)的对比。附完整代码,订阅专栏后可直接查看

对比了经典扩展卡尔曼滤波(EKF)与H∞优化的EKF(H∞-EKF)在目标跟踪中的性能。通过MATLAB仿真实验,结果显示:在存在模型误差和测量噪声的情况下,H∞-EKF相比经典EKF在位置误差上降低

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 243

困难——第十二章

1. 编程用链表方法实现堆栈数据结构。堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加。堆栈结构可用链表实现。设计一个链表结构需包含两个成员:一个存放数据,一个为指向下一个节点的指针。当每次有一个新数据要放入堆栈时,称为“压入堆栈”,这时动态建立一个链表的节点,并连接到链表的结尾;当每次从堆栈中取出一个数据时,称为“弹出堆栈”,这意味着从链表的最后一个节点.

syh's BF的博客 1249

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 382

【数据结构】栈的简单实现

我们都知道栈(Stack)是限制仅在表的一段进行插入和删除运算的线性表 1、通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom) 2、当表中没有元素时被称为空栈 3、栈为先进后出(Last In First Out)的线性表,简称LIFO 栈的修改总是按照先进后出的原则进行 实现代码如下: /** * @date 2018/10/26 * 栈的实现 */ ...

Evan_QB的博客 312

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言链表实现堆栈(0基础也能学会)

C语言链表实现堆栈(小白专场)

qq_63438062的博客 2169

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构——堆栈

创建一个堆栈对象s(注意stack是模板类):stack s;//堆栈的数据类型是字符型把一个字符ct压入堆栈: s.push(ct);把栈顶元素弹出:s.pop();获取栈顶元素,放入变量c2: c2 = s.top();判断堆栈是否空: s.empty(),如果为空则函数返回true,如果不空则返回falsen获取栈顶元素,放入变量c2: c2 = s.top();n判断堆栈是否空: s.empty(),如果为空则函数返回true,如果不空则返回false。

Ryan-Yu的博客 785

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

实现堆栈的三种方式

堆栈(stack)这种数据结构最鲜明的特点就是其后进后出(Last-In First-Out,LIFO)的方式。 /** * 所有的ADT都必须确定一件事情——如何获取内存来存储值。有三种可选方案: * 静态数组、动态分配的数组和动态分配的链式结构。 * * 静态数组要求结构的长度固定。而且,这个长度必须在编译时确定,但是,这个方案最为简单,而且最不容易出错。 * 动态数组,可以在运行时才决定数组的长度。而且,如果需要的话,你可以通过分配一个新的、 * 更大的数组、把原来数组的元素复制到新数组

Ocodotial的博客 2017

堆栈详解

一 首先介绍下堆和堆栈(堆栈)的是什么,区别是什么? 注意,其实堆栈本身就是栈(stack)。通俗易懂说,堆栈==栈, 堆==堆(heap) 1.堆:什么是堆?又该怎么理解呢? 答:1,堆(heap)是一种数据结构,堆控制一段自己的存储空间,叫做堆空间。 2,堆是在程序运行时申请的动态内存,而不是在程序编译时,申请某个大小的内存空间。 3,堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。 2. 栈(堆栈):什么是堆栈?又该怎么理解呢? ...

大西瓜不甜的博客 3万+

C语言printf压栈问题

1. 事出有因 今天在刷面试题的时候遇到如下一个面试题: #include <stdio.h> #include <stdlib.h> int main() { int arr[] = { 6, 7, 8, 9, 10 }; int *ptr = arr; *(ptr++) += 123; printf("%d, %d\n", *pt...

weixin_38815998的博客 1168

(C语言)链表实现堆栈结构

堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。设计一个链表结构需包含两个成员:一个存放数据,一个为指向下一个节点的指针。当每次有一个新数据要放入堆栈时,称为“压入堆栈”,这时动态建立一个链表的节点,并连接到链表的结尾;当每次从堆栈中取出一个数据时,称为“弹出堆栈”,这意味着从链表的最后一个节点中取出该节点的数据成员,同时删除该节点,释放该节点所占的内存。

2301_80460842的博客 395

堆栈

总线概述 总线的分类 总线的主要性能指标 总线指标 PC系列总线 测控机箱底板总线 一起与计算机互连总线 PCI总线 PCI局部总线 PCI总线的特点 基于PCI总线的计算机系统 PCI总线信号 PCI总线的应用 PIC Express总线 PEI-E1.0 PEI-E2.0 PEI-E3.0 PEI-E的未来 USB总线 USB总线的特点 USB总线的规范 USB接口规范 USB的数据编码 USB的传输方式 USB包 USB设备的枚举 IEEE 1394总线 IEEE 1394总线 IEEE 1394总线

qq_35912930的博客 1243

C语言中printf的压栈和i++与++i问题[保姆级别教学]

前言 当printf遇上了i++和++i 当我看到这个代码的时候,突然就对printf和i++产生了疑问。 i=1; printf("%d %d\n",i,i++) // 2 1 i=1; printf("%d %d\n",i++,i); // 1 2 i=1; printf("%d %d %d\n",i,i++,i); // 2 1 2 i=1; printf("%d %d %d %d %d\n",i

一枚本科生在学习编程中遇到问题的解决方法。 973

用链表来实现堆栈

数组结构实现堆栈较为简单,但因为如果堆栈本身是变动的话,数组大小并无法实现规划声明,因此,使用链表来实现堆栈可以随时改变链表的长度,不过缺点是设计算法较为复杂。 package Stack; public class StackBylink { public Node front;//指向堆栈底部的指针 public Node rear;//指向堆栈顶端的指针 public boolean isEmpty() {//类方法:判断堆栈是否为空堆栈 return front==null; } p

qq_46249770的博客 1171

数据结构之堆栈(java编程实现)

数据结构之堆栈(java编程实现) 首先我们了解堆栈的基本概念和特点: 堆栈是一组相同数据类型的组合,所有的操作均在堆栈顶端进行,具有“后进先出”的特性。 所谓后进先出(Last in First out)的概念,其实就如同餐盘由桌面往上一个一个叠放,但是取用时由最上面先拿。堆栈特性如下: ①只能从堆栈的顶端存取数据 ②数据的存取符合“First in Last out”原则 堆栈的基本操作有以下五种: ①creat:创建一个空堆栈 ②push:把数据压入堆栈顶端,并且得到新堆栈 ③pop:从堆栈顶端弹出数

weixin_50686532的博客 1158

被微软收购后却惨遭下架,六年后我又开发新产品来抗衡

“过河拆桥”,微软停用Wunderlist?

优快云资讯 8482
上一篇: 第12章实验1:学生成绩管理系统V5.0(c语言)
下一篇: MOOC (C++) 3-5美分找钱 将n美分转换成25、10、5和1美分的硬币总共有多少种转换方法?
superlistboy
博客等级 码龄6年 7782粉丝 58原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值