用链表实现栈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

忘记安卓锁屏密码怎么办?3种方法教你用ADB恢复访问(含gesture.key解密)

本文详细解析了安卓设备锁屏密码的存储与加密机制,特别是gesture.key文件的解密原理。针对遗忘密码的常见问题,提供了三种核心恢复方法:利用ADB调试接口删除密码文件、对gesture.key进行离线分析与解密,以及应对高版本系统的替代方案。重点介绍了通过ADB工具在Recovery模式下操作的具体步骤,帮助用户在合法合规前提下恢复设备访问权限。

php55的博客 959

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

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

weixin_42295110的博客 967

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

YoloV8改进策略:轻量级的CloFormer助力Yolov8在速度和精度上实现双双提升

CloFormer是清华大学在今年发表的轻量级主干网络,引入了AttnConv,一种attention风格的卷积算子。所提出的AttnConv使用共享权重来聚合局部信息,并配置精心设计的上下文感知权重来增强局部特征。AttnConv和普通attention的结合使用池化来减少CloFormer中的FLOPs,使模型能够感知高频和低频信息。这篇文章主要向大家讲解如何将CloFormer加入到YoloV8中。论文链接:https://arxiv.org/abs/2303.17803v5。

m0_47867638的博客 4311

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

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

noodletpday的博客 816

亚马逊跨境电商选品数据分析:Python爬虫实战指南

本文将带领大家构建一套完整的亚马逊选品数据采集与分析系统,使用最新的Python技术栈,从零开始爬取亚马逊商品数据,并进行深度分析。

2201_76125261的博客 299

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

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

cloudYun的博客 920

vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

vue3,elementPlus,el-table,typescript,表格组件,Table表格,表格拖动排序,表格拖曳排序,鼠标拖拽表格进行排序功能,elementplus表格如何实现拖动每行进行排序操作,表格拖动改变顺序,鼠标拖曳,表格内的数据项拖拽排序,vue3如何实现element-Plus表格组件进行表格内的数据项拖拽排序,列表拖拽排序效果,实现table动态拖拽,鼠标拖着排序,vue3 element Plus 表格拖曳拖动拖拽 排序,el-table拖拽排序实现,表格内容拖拽重新排序,树形表

✅ 精选推荐文章 1万+

第四部分:VTK常用类详解(第96章 vtkCaptionActor2D标题演员类)

VTK标题演员实现3D场景标注功能 摘要:vtkCaptionActor2D是VTK可视化工具包中的标题标注组件,提供混合2D/3D的文本标注功能。该组件通过连接线将文本标注与场景中的3D点关联,支持多行文本显示、自定义文本样式和动态定位。文章详细介绍了标题演员的设计原理、坐标系统控制方法、文本内容管理和大小自适应机制,并展示了在3D模型标注、数据可视化和交互场景中的典型应用。标题演员通过组合文本、边框和连接线组件,实现了灵活多样的场景标注方案,是科学计算可视化中重要的标注工具。

仰望星空的博客 255

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

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

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

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

双向特征金字塔网络(BiFPN)是一种强化多尺度特征融合支持“自顶向下+自底向上”的双向特征流动,同时保留不同尺度的细节信息;引入加权融合机制,自动学习不同特征的重要性权重;裁剪冗余节点,在轻量化的同时提升融合效率。

m0_64661770的博客 492

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

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

HuangJunyu7854的博客 429

Wi-Fi数据帧类别

QoS

1042484520@qq.com(邮箱) 3156

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

zl_dfq的博客 438

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

nannian123的博客 182

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构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、付费专栏及课程。

余额充值