用链表实现栈C++实现源码

C++实现栈(链表模拟)【每一步详细深入讲解,代码清晰、简单、易懂】 链表则不同,每次入栈相当于在后面多链上一个节点,而出栈则是把最后一个节点设为。由于栈是一种较为简单的数据结构,用链表实现栈,逻辑上和数组差不多。数组实现栈时,每次入栈就相当于将数组中下一个位置填值。由于我们是用链表模拟栈,因此不会有栈满的情况。根据上面的分析,可以得出,我们需要一下数据。内置的在尾部插入函数,并递增栈顶迭代器。先判断时候为空,再执行操作。 阅读详情


头文件:

//Stack.h

struct node;
typedef struct node *Stack;

Stack CreateStack();
void Push( int, Stack );
void PrintStack( Stack );
void Pop(Stack);
int StackLength( Stack );

 

源文件:

//Stack.cpp
#include "Stack.h"
#include <iostream>
using namespace std;

struct node{
	int data;
	node *next;
};

Stack CreateStack()
{
	Stack S;
	S = (node *)malloc(sizeof(node));
	if( S == NULL )
		cout<<"内存分配失败!"<<endl;
	S->next = NULL;

	return S;
}

void Push( int x, Stack S )
{
	node *tmp;
	tmp = (node *)malloc(sizeof(node));

	if( tmp == NULL )
		cout << "内存分配失败!"<<endl;
	else{
		tmp->data = x;
		tmp->next = S->next;
		S->next = tmp;
	}
}

void Pop(Stack S)
{
	node *top;
	if( S->next == NULL )
		cout << "Pop失败:空栈!"<<endl;
	else{
		top = S->next;
		S->next = S->next->next;
		free(top);
	}
}

int StackLength( Stack S)
{
	int n = 0;
	while( S->next != NULL )
	{
		S = S->next;
		n++;
	}
	return n;
}


void PrintStack(Stack S)
{
	cout << "Stack: " << endl;
	S = S->next; //第一个S,S为空
	while( S != NULL )
	{
		//cout << "S!=NULL"<<endl;
		cout << S->data ;
		S = S->next;
	}
	cout << endl;
}


测试文件:

//main.cpp
#include "Stack.h"
#include <iostream>
using namespace std;

void  main()
{
	int n;
	int x;
	Stack S = CreateStack();
	cout << "输入n:";
	cin >> n;
	while( n-- )
	{
		cout <<" 输入数字:";
		cin >> x;
		Push( x, S);
	}
	PrintStack(S);

	int m;
	cout << "输入Pop个数m:";
	cin >> m;
	while(m--)
	{
		Pop(S);
	}
	PrintStack(S);

	cout << "栈的长度:" << StackLength(S) << endl;
	PrintStack(S);

	system("PAUSE");
}


 

 

 

 

数据结构C++实现深度解析:从课本源码到工程实践 数据结构是计算机科学中组织和存储数据的核心基础,其核心原理在于通过特定的逻辑结构与物理存储方式,实现数据的高效管理、检索与操作。理解数据结构的底层实现,是掌握算法设计与性能优化的关键。从工程实践角度看,深入源码能揭示封装、泛型、内存管理等关键技术价值,帮助开发者规避指针误用、内存泄漏等常见陷阱。在应用场景上,无论是数据库索引(B+树)、缓存系统(哈希表)还是任务调度(优先队列),都离不开对数据结构特性的精准把握。本文以《数据结构——C++实现》第二版源码为蓝本,聚焦链表、哈希表、递归等热词,通过剖析指针操作 阅读详情

相关推荐

你学过的优先队列、最大流、动态规划,全藏在 OpenCV 这 3000 行分割源码里——图像分割中的经典算法设计

学数据结构的时候,优先队列、最大流、动态规划、扫描线栈,这些东西考完试就还给老师了。工作之后写业务逻辑,用到最多的无非是哈希表和排序。那些经典算法到底有什么用?直到翻开 OpenCV 下面的四个文件,才发现这些算法不是在课本里吃灰的理论工具,而是在每一帧图像处理中真刀真枪地跑着。四个文件,加起来大约 3000 行 C++ 代码:这篇文章不是要讲"怎么调 API"——那看文档就够了。我要做的是把这 3000 行源码拆开,看看每个算法在工程实现中到底长什么样,和教科书上的伪代码差在哪里,以及为什么差在那里。如

weixin_45715405的博客 100

数据结构与算法(七)--使用链表实现栈

之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到。。本章我们通过链表去实现栈,当然我们也会讲到用链表实现另一个数据结构–队列。并且比较用数组实现和用链表实现他们之间的差异。

学习不止境的博客 1406

C/C++ 链表栈 LinkedListStack算法详解及源码

链表栈的基本思想是使用一个单链表来存储栈中的元素。它具有常见的栈操作,包括压栈(push)、弹栈(pop)、查看栈顶元素(top)、判断栈是否为空(empty)等。它具有常见的栈操作,包括压栈(push)、弹栈(pop)、查看栈顶元素(top)、判断栈是否为空(empty)等。它具有常见的栈操作,包括压栈(push)、弹栈(pop)、查看栈顶元素(top)、判断栈是否为空(empty)等。它具有常见的栈操作,包括压栈(push)、弹栈(pop)、查看栈顶元素(top)、判断栈是否为空(empty)等。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2591

栈:使用链表实现一个栈

#include<iostream> using namespace std; struct Node { int data; Node* link; }; Node* top = NULL; void Push(int x) { Node* temp = new Node; temp->data = x; temp->link = top; top = temp; } void Pop() { Node* temp; if(top == NULL) re.

EDGNB6666的博客 977

基于链表的栈实现详解与C++源码

栈是一种抽象数据类型(ADT),它遵循后进先出(LIFO, Last In First Out)原则,即最后被添加到栈中的元素会第一个被取出。栈的数据操作限制为只能在栈顶进行,这称为“栈顶”操作。这一性质使得栈在程序中可以用来暂存数据,例如在递归函数中保存返回地址、在程序执行中保存寄存器的状态。链表是一种线性数据结构,由一系列节点组成,每个节点包含数据以及指向下一个节点的链接(指针)。链表不需要连续的内存空间,且可以通过改变指针来轻易地进行插入和删除操作。

weixin_35750953的博客 856

《数据结构、算法与应用 C++语言描述》原书第2版源码详解

数据结构是计算机存储、组织数据的方式,它决定了数据操作的效率和算法的实现复杂度。对于任何IT专业人员来说,无论是进行软件开发还是系统分析,深刻理解数据结构都是必不可少的基础技能。数据结构(Data Structure)是数据元素的集合以及数据元素之间关系的描述,它不仅关注数据本身,还关注数据之间的关联方式。从逻辑上划分,数据结构主要分为两大类:线性结构和非线性结构。节点(Node):通常包含一个数据字段和一个指向下一个节点的指针。链表(LinkedList)

weixin_42515392的博客 802

C语言通过链表实现--栈

一、栈注释 1.结构体构建 定义了Item,Item中储存了一个字符串和总的栈数numb。 定义Node节点,节点中有Item,和指向node的指针(用来链接上一项)。 typedef struct { char str[10]; int numb; }Item; typedef struct node { Item item; struct node* next; } Node; typedef struct { Node* head; }Stack; 2.初始化 pq传进..

q3415597181的博客 2471

基于51单片机的多功能智能路灯控制系统(仿真+代码+原理图)

智能路灯控制系统主要由51单片机最小系统+1602显示模块+DS1302时钟模块+光强检测模块+按键输入模块+声光报警模块+LED照明模块+状态检测电路+人体车辆红外检测模块组成。能实现以下功能: 1.能够按键设定系统时间、工作时间、光照阈值 2.工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s 3.非工作时间光照强度低于阈值,路灯点亮 4.能够检测系统工作状态,路灯应亮未亮,声光报警 5.具备手动控制,能够切换自动/手动控制功能

u012759563的博客 8177

栈的链表实现方式(C++版)

栈的链表实现也有两种,一种是带头结点的链表的实现方式,一种是不带头结点的链表的实现方式。

weixin_42295110的博客 967

Arduino Uno 实验15——MQ-135 气体传感器模块

MQ-135 气体传感器模块简介(空气质量检测 有害气体检测)   MQ135气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在污染气体时,传感器的电导率随空气中污染气体浓度的增加而增大。MQ135气体传感器对氨气、硫化物、苯系蒸汽的灵敏度高,对烟雾和其它有害气体的监测也很理想。这种传感器可检测多种有害气体,是一款适合多种应用的低成本传感器。   主要用途:家庭和环境的有害气体检测装置   主要芯片:LM393、MQ-135气体传感器 不同气体的型号选择

weixin_42645653的博客 2万+

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 448

C++类模板编写栈和队列(链表实现)

C++类模板编写栈和队列(链表实现) 本文自定义单链表模板,并使用链表实现了栈和队列的类。源码下载https://github.com/shengjiangcong/learn_code.git 定义一个单链表 C++ 栈实现 C++ 队列实现 代码参考https://github.com/shengjiangcong/learn_code.git ...

noodletpday的博客 816

Lane、PHY和Preset Value Bit

每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。

weixin_58083606的博客 1296

C++实现链式栈和线性栈

????前言    栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。   &nbsp...

cloudYun的博客 920

YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新150多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-24。项目介绍在大家购买专栏后,加入学

Limiiiing的博客 1万+

37、基于视觉的轻量级面部呼吸和心率测量技术

本文提出了一种基于视觉的轻量级面部呼吸和心率测量技术,通过远程光电容积脉搏波描记法(RPPG)和面部振动信息实现非接触式生理信号采集。创新性地结合框选和特征点选择多个感兴趣区域(ROI),并采用光流跟踪、主成分分析(PCA)和集成经验模态分解(EEMD)等方法优化信号处理流程。实验结果表明,该方法在测量精度和稳定性方面优于传统方法,并可在树莓派4等低功耗平台上实现实时运行,具有广泛的应用前景。

r7s8t的博客 307

【c++深入系列】:万字详解栈和队列和deque(附模拟实现的源码)

想要掌握c++的栈和队列的双端队列,看这篇文章就够了!

努力努力再努力wz的博客 1565

嵌入式系统开发笔记112:通过有人云测试MQTT

项目中使用到“有人”公司的WH-LTE-7S0模块,本文讲解通过有人云进行MQTT测试的方法。

snmplink的博客 997

C++栈(顺序表、链表实现)

在数据结构领域中,栈可类比为一摞整齐堆叠的物品,例如一摞盘子。以餐厅后厨摆放的一摞盘子为例,往这摞盘子里添加新盘子或从中拿走盘子,都只能在最上方进行操作。栈的数据操作方式与之相似,数据的插入操作(即入栈)和删除操作(即出栈)均只能在一端进行,这一端被称为栈顶。假设有一组数字需要存入栈中,这些数字只能依次从栈顶逐个存入。而当需要取出数字时,同样也只能从栈顶开始。先存入栈中的数字会被后续存入的数字压在下方,必须等上方的数字全部取出后,下方的数字才能被取出。这体现了栈 “后进先出。

HuangJunyu7854的博客 429

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2169

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ 之 【栈的简介 与 模拟实现】

栈是一种,是一种特殊的线性表,

zl_dfq的博客 438

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

五月集训(第十二日)链表

五月集训(第十二日)链表

nannian123的博客 182

VC中sqlite的使用

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

数据结构2-1栈

数据结构2-1(栈 stack)栈的概念栈的基本模型栈的功能函数empty()函数代码size()函数代码push()函数代码pop()函数代码top()函数代码STL 栈 本文是介绍关于栈的基础知识,以及其STL 栈的使用。 栈的概念 栈是一种基本的数据结构,满足先进后出的基本原则(FILO),该数据结构可以看作向井中放物品与取物品。 如下图: 栈的基本模型 栈的模型可以通过多种途径实现。较为常见的是数组模拟栈,也可以以链表模拟栈。 数组模拟栈: 栈的结构需要存储空间与栈顶的位置。 int stack[M

CSNO.i的博客 266

数据结构源码

摘要:C++数据结构源码已发布至GitCode开源平台(https://gitcode.com/2401_85824583/DataStructureDemo)。该资源面向全球开发者,提供代码托管服务,便于开发者访问、学习数据结构实现案例。项目采用C++语言编写,适合编程学习者参考使用。

LHStudio的博客 189

LinuxC应用开发学习笔记(五)--数据结构

6、双向链表 双向链表的头文件 #ifndef LLIST_H_ #define LLIST_H_ #define LLIST_FORWARD 1 #define LLIST_BACKWARD 2 typedef void llist_op(const void *); typedef int llist_cmp(const void *,const void *); struct llist_node_st { struct llist_node_st *prev; stru

梅山 884

C++数据结构(源码+注释)

由节点node构成,第一节点为head头节点,节点由数据data 和 next 指向下一个节点的指针构成。2025/11/17 开写博客,已过完二叉树。由零个或多个数据元素组成的有限序列。大二2025/8/12开始学习c++数组,vector<类型> 名称,

2301_79300447的博客 262
上一篇: Ubuntu下将Sublime加入环境变量
下一篇: 二叉搜索树C++实现源码
vshadow
博客等级 码龄18年 29粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值