C++数据结构笔记(6)栈的链式存储结构

2023-10-31

对于栈的链式存储结构,实现原理本质上是受限的链表;此外与顺序存储不同的是,链式结构选用左边(头结点)作为栈的顶部,这样的好处是只要找到头结点即可实现插入元素等操作。

LinkStack.h头文件

#ifndef LINKSTACK_H
#define LINKSTACK_H

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

//结点 
typedef struct LinkNode{
	struct LinkNode* next;
}LinkNode;
//链式栈 
typedef struct LinkStack{
	LinkNode head;
	int size;
}LinkStack;
//初始化
LinkStack* Init_LinkStack(); 
//入栈 
void Push_LinkStack(LinkStack* stack,LinkNode* data);
//出栈 
void Pop_LinkStack(LinkStack* stack);
//返回栈顶元素 
LinkNode* Top_LinkStack(LinkStack* stack);
//返回栈元素的个数 
int Size_LinkStack(LinkStack* stack);
//清空栈
void Clear_LinkStack(LinkStack* stack); 
//销毁栈 
void FreeSpace_LinkStack(LinkStack* stack);


#endif 

LinkStack.c文件

初始化

LinkStack* Init_LinkStack(){
	
	LinkStack* stack =(LinkStack*)malloc(sizeof(LinkStack));
	stack->head.next=NULL;
	stack->size=0;
	
	return stack;
} 

入栈 

void Push_LinkStack(LinkStack* stack,LinkNode* data){
	if(stack==NULL)
		return;
	if(data==NULL)
		return;
	data->next=stack->head.next;
	stack->head.next=data;
	stack->size++;
}

出栈 

void Pop_LinkStack(LinkStack* stack){
	if(stack==NULL)
		return;
	
	if(stack->size==0)
		return; 
	//直接跃迁到第二个结点即可	
	LinkNode* pNext=stack->head.next;
	stack->head.next=pNext->next;
	stack->size--;
}

返回栈顶元素 
 

LinkNode* Top_LinkStack(LinkStack* stack){
	if(stack==NULL)
		return NULL;
	return stack->head.next;
}

返回栈元素的个数 

int Size_LinkStack(LinkStack* stack){
	if(stack==NULL)
		return 0;
	return stack->size;
}

清空栈

void Clear_LinkStack(LinkStack* stack){
	if(stack==NULL)
		return;
	stack->head.next=NULL;
	stack->size=0;
	//只需要清零即可,不需要关心内存的问题 
}

销毁栈 
 

void FreeSpace_LinkStack(LinkStack* stack){
	if(stack==NULL)
		return;
	free(stack); 
}

main.cpp文件

#include <iostream>
#include <string.h>
#include "LinkStack.h"
using namespace std;

typedef struct test{
	LinkNode node;
	int num;
	string name;
}test;


int main(int argc, char** argv) {
	
	LinkStack* stack =Init_LinkStack();
	test t1,t2;
	t1.name="JSL";
	t1.num=7371;
	t2.name="HYH";
	t2.num=7166;

	Push_LinkStack(stack,(LinkNode*)&t1);
	Push_LinkStack(stack,(LinkNode*)&t2);
	
	cout<<"栈中元素的个数为:"<<(Size_LinkStack(stack))<<endl;
	
	while(Size_LinkStack(stack)>0)
	{
		test* tt=(test*)Top_LinkStack(stack);
		cout<<(tt->name)<<"is"<<(tt->num)<<endl;
		Pop_LinkStack(stack);
	}

	FreeSpace_LinkStack(stack);
	
	return 0;
}

运行结果如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++数据结构笔记(6)栈的链式存储结构 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • 1016 部分A+B (15 分)- PAT乙级真题

    题滴链接https pintia cn problem sets 994805260223102976 problems 994805306310115328 1016 部分A B 15 分 正整数 A 的 D A 为 1 位整数 部分 定
  • 实现分页展示

    当数据量较多时 用户需要拖动页面才可以浏览更多消息 分页显示的步骤 思路 确定每页显示的数据量 确定分页显示所需的总页面 编写SQL查询语句 实现数据查询 在JSP页面中进行分页显示设置 一 计算显示总页数 1 select count 1
  • ES6代码转为ES5代码的在线转换工具以及运行工具

    学习es6是一个很有意思的过程 里面新增的语法及语法糖都能大大减少我们的代码量 但有些语法是目前浏览器无法支持的 所以我们需要转换一下 为了方便学习以及测试 下面推荐两款使用的es6在线转换工具 1 Babeljs 在线转换地址 2 es6
  • 神经网络学习小记录70——Keras 使用Google Colab进行深度学习

    神经网络学习小记录70 Keras 使用Google Colab进行深度学习 注意事项 学习前言 什么是Google Colab Colab官网 利用Colab进行训练 一 数据集与预训练权重的上传 1 数据集的上传 2 预训练权重的上传
  • 在idea中如何在控制台输出日志?——用log4j

    简单记录下idea中如何配置使得在控制台输出日志 首先做个对比 输出日志和不输出日志有什么区别 下面的例子是我在学习mybatis中查询数据库时返回的结果 不输出日志的结果显示如下 输出日志的结果显示如下 经过对比 是不是在输出结果的同时把
  • java 语言 if else语句的使用方法

    if else语句的结果如下 if 条件1 代码块1 else if 条件2 代码块2 else 代码块3 if else语句使用方法 如果条件1是true则执行 代码块1 如果条件2是true则执行代码块2 否则执行代码块3 下面是例子
  • XXX项目总结

    目录 1 SQLite 数据库 1 1 创建数据库连接 1 2 打开数据库连接 1 3 关闭数据库连接 1 4 查询数据库示例 结果为单条数据 1 5 查询数据库示例2 结果为多条数据 2 数据转换 2 1 QString 转 std st
  • 单循环链表实现(设立尾指针)(第二章 P35)

    设立尾指针的单循环链表 单链的循环链表结点的存储结构和单链表的存储结构一样 所不同的是 最后一个结点的 next 域指向头结点 而不是 空 这样 由表尾很容易找到表头 但若链表较长 则由表头找到表尾较费时 因而 单循环链表往往设立尾指针而不
  • Redis实战

    Redis是目前非常主流的KV数据库 它因高性能的读写能力而著称 其实还有另外一个优势 就是Redis提供了更加丰富的数据类型 这使得Redis有着更加广泛的使用场景 那Redis提供给用户的有哪些数据类型呢 主要有 string 字符串
  • 在HBuilder中怎么创建Vue项目

    软件信息 HBuilder X 3 1 18 目录 1 新建Element UI项目 2 更改App vue内容 3 在src中创建router文件夹并新建index js文件 4 在src中创建components文件夹存放组件 5 在s
  • django model字段

    1 AutoField 一个自动递增的整型字段 添加记录时它会自动增长 你通常不需要直接使用这个字段 如果你不指定主键的话 系统会自动添加一个主键字段到你的model 2 BooleanField 布尔字段 管理工具里会自动将其描述为che
  • Python与数据分析--Matplotlib-1

    目录 1 Matplotlib库函数导入 2 简单尝试绘图 3 绘制多条折线图 4 绘制多种颜色风格曲线 5 图片内容文本操作实例 6 图例设置实例 7 坐标轴设置实例 1 Matplotlib库函数导入 导入matplotlib库 imp
  • dplyr:一套数据处理语法

    可能更多的人知道Hadley大神是因为他那大名鼎鼎的ggplot2 但dplyr包也不遑多让 作为一套数据处理与清洗的语法 dplyr包都是你玩转数据的必备武器 R在基础配置中进行数据处理无疑也是okay的 但总有懒人会想到要偷更多懒 于是
  • Demo产品模块

  • 对称加密算法(DES、3DES、AES)

    文章目录 DES 3DES AES DES DES加密算法因现代的计算能力 已经被淘汰掉了 因为现在在24小时内就可以被破解 特点 分组加密算法 明文以64位分组 64位明文输入 64位密文输出 对称算法 加密和解密使用同一密钥 有效密钥长
  • servlet 3.0使用和原理

    目录 Servlet 3 0 起步 Servlet 3 0 异步 SPI原理分析 使用SPI手写Servlet 3 0 Servlet 3 0 起步 Servlet 3 0新增了若干注解 用于简化Servlet 过滤器和监听器的声明 使得w
  • LeetCode刷题之“最长公共前缀“的python解法之一

    最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀
  • 图片路径转文件流

    export const imageToBase64 img gt Vue prototype imageToBase64 img gt 定义全局 var canvas document createElement canvas canva
  • 【DL】第 5 章:生成模型

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • C++数据结构笔记(6)栈的链式存储结构

    对于栈的链式存储结构 实现原理本质上是受限的链表 此外与顺序存储不同的是 链式结构选用左边 头结点 作为栈的顶部 这样的好处是只要找到头结点即可实现插入元素等操作 LinkStack h头文件 ifndef LINKSTACK H defi