C++实现一个链栈

news2024/11/25 2:27:29

C++实现一个链栈

  • 什么是链栈
  • 如何实现链栈
  • 链栈的实现
    • 开发环境
    • 代码实现
    • 运行结果

什么是链栈

链栈不名思意,就是既具有链表的特性,又具有栈的特性。
即:

  1. 链栈中的元素由指针域和数据域组成,通过指针指向下一个元素;2.链栈同时又具有栈的特性,先进后出。

如何实现链栈

根据上述链栈所具有的特征,这里需要创建一个链表结构体和一个栈结构体。然后创建一个链栈类,通过对链表和栈的特性的应用来实现链栈。(这里只是一个思路)

链栈的实现

开发环境

作者采用的是visual studio 2017,编译的是debug版本下的x86。如下图:
在这里插入图片描述
创建的是控制台输出程序,创建过程这里忽略。

代码实现

共包含三个文件:listStackDemo1.cpp,ListStack.h,ListStack.cpp。其中listStackDemo1.cpp就是主函数所在的文件,相当于以往的main.cpp,其中是链栈的使用。ListStack.h和ListStack.cpp类主要实现链栈。
下面是具体代码:
ListStack.h

#pragma once

typedef struct ListNode
{
	char data;
	struct ListNode *pNext;
}stuNode;

typedef struct Stack
{
	stuNode *pTop;
	int nSize;
}stuListStack;


class ListStack
{
public:
	ListStack();
	bool isEmpty();
	void push(char c);
	char pop();
	int getSizeCount();
	void print();
private:
	stuListStack m_listStack;
};

ListStack.cpp

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

ListStack::ListStack()
{
	m_listStack.pTop = nullptr;
	m_listStack.nSize = 0;
}

bool ListStack::isEmpty()
{
	if (m_listStack.pTop == nullptr)
	{
		return true;
	}
	return false;
}

void ListStack::push(char c)
{
	stuNode *pNode = new stuNode;
	pNode->data = c;
	pNode->pNext = m_listStack.pTop;
	m_listStack.pTop = pNode;
	m_listStack.nSize++;
}

char ListStack::pop()
{
	if (isEmpty())
	{
		return -1;
	}
	char c = m_listStack.pTop->data;
	stuNode *pDelete = m_listStack.pTop;
	m_listStack.pTop = m_listStack.pTop->pNext;
	m_listStack.nSize--;
	delete pDelete;

	return c;
}

int ListStack::getSizeCount()
{
	return m_listStack.nSize;
}

void ListStack::print()
{
	stuNode *p = m_listStack.pTop;
	while (p) 
	{
		cout << p->data << " ";
		p = p->pNext;
	}
	cout << endl;
}

listStackDemo1.cpp

#include <iostream>
#include "ListStack.h"

using namespace std;

int main()
{
	ListStack listStack;
	int nCount = listStack.getSizeCount();
	cout<<"链栈的元素个数:"<< nCount <<endl;
	listStack.push('A');
	listStack.push('B');
	listStack.push('C');
	listStack.push('D');
	listStack.push('E');
	listStack.print();
	cout << "请输入出栈次数:"<<endl;
	int m;
	cin >> m;
	for (int i = 0; i < m;++i) 
	{
		cout<<listStack.pop()<<" ";
	}
	cout << endl;
	nCount = listStack.getSizeCount();
	cout <<"出栈后链栈中的元素个数:"<< nCount<<endl;
	listStack.print();

	return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/849788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试学习:师傅领进门修行看个人

本课程学习导图 2-1 软件测试阶段 1、单元测试 概念&#xff1a; 对软件中的 最小可测试单元 进行检查和验证。 原则&#xff1a; &#xff08;1&#xff09;尽可能测试用例相互独立 &#xff08;2&#xff09;一般由代码开发人员实施 好处&#xff1a;&#xff08;…

影响亚马逊Listing转化率的14大因素你知道吗?

我们都知道亚马逊listing转化率对于链接的推新和维稳来说有多么重要&#xff0c;只要转化率的比值无法达到整体市场平均比值的及格线&#xff0c;你就很可能会慢慢被亚马逊的飞轮算法所淘汰。 那么&#xff0c;具体是哪些因素在影响着你的listing转化率呢?这里我们可以分为显…

容器——1.集合概述

文章目录 1.1. Java 集合概览1.2. 说说 List,Set,Map 三者的区别&#xff1f;1.3. 集合框架底层数据结构总结1.3.1. List1.3.2. Set1.3.3. Map 1.4. 如何选用集合?1.5. 为什么要使用集合&#xff1f; 1.1. Java 集合概览 从下图可以看出&#xff0c;在 Java 中除了以 Map 结尾…

【深度学习】【风格迁移】Visual Concept Translator,一般图像到图像的翻译与一次性图像引导,论文

General Image-to-Image Translation with One-Shot Image Guidance 论文&#xff1a;https://arxiv.org/abs/2307.14352 代码&#xff1a;https://github.com/crystalneuro/visual-concept-translator 文章目录 Abstract1. Introduction2. 相关工作2.1 图像到图像转换2.2. Di…

Node.js |(三)Node.js API:path模块及Node.js 模块化 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;path模块&#x1f4da;Node.js模块化&#x1f407;介绍&#x1f407;模块暴露数据⭐️模块初体验⭐️暴露数据 &#x1f407;导入文件模块&#x1f407;导入文件夹的…

c++日志工具之——log4cpp

1、log4cpp概述 Log4cpp是一个开源的C类库&#xff0c;它提供了C程序中使用日志和跟踪调试的功能&#xff0c;它的优点如下&#xff1a; 提供应用程序运行上下文&#xff0c;方便跟踪调试&#xff1b; 可扩展的、多种方式记录日志&#xff0c;包括命令行、文件、回卷文件、内…

Kubernetes入门 一、认识Kubernetes

目录 什么是Kubernetes为什么使用 Kubernetes集群组件组件Master组件节点组件附加组件 核心概念和资源服务的分类资源和对象命名空间级ContainerPodreplicas控制器-ReplicationController控制器-ReplicaSet控制器-StatefulSet控制器-DaemonSet控制器-JobDeployment服务发现-Ser…

pytest-xdist分布式测试原理浅析

目录 pytest-xdist执行流程&#xff1a; pytest-xdist 模块结构&#xff1a; pytest-xdist分布式测试原理&#xff1a; pytest-xdist源码浅读&#xff1a; pytest-xdist执行流程&#xff1a; 解析命令行参数&#xff1a;pytest-xdist 会解析命令行参数&#xff0c;获取用户…

Vue3_对响应式对象解构赋值之后失去响应性——toRefs()

官网toRefs() :响应式 API&#xff1a;工具函数 | Vue.js toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref&#xff0c;请改用 toRef。 setup(){const state reactive({name:"张三"age:14})const stateAsToRefs toRef…

SpringBoot 热部署

文章目录 前言一、spring-boot-devtools添加热部署框架支持settings 开启项目自动编译开启运行中热部署使用Debug启动 二、IDEA 自带 HowSwap 功能设置 Spring Boot 启动类等待项目启动完成点击热加载按钮存在的问题 三、JRebel 插件【推荐】安装插件使用插件 前言 在日常开发…

linux学习——Redis基础

目录 一、noSQL 类型 特点及应用场景 二、Redis 三、安装方式 编译安装 rpm安装 四、目录结构 /etc/redis.conf 五、Redis命令 六、本地登录和远程登录 本地登录 远程登录 七、数据库操作 帮助信息 库操作 数据操作 八、Redis持久化 一、RDB类型 二、AOF模式 一…

小白到运维工程师自学之路 第六十九集 (构建Docker容器监控系统:Cadvisor +Prometheus+Grafana)

一、概述 Prometheus产品简介 Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来&#xff0c;很多公司和组织都采用了Prometheus&#xff0c;该项目拥有非常活跃的开发者和用户社区。 它现在是一个独立的开源项目&#xff0c;可以独立于任…

由于找不到msvcp140.dll无法继续执行代码多种解决方法

msvcp140.dll的作用是提供C程序运行所需的一些基本函数和类库&#xff0c;包括字符串处理、数学计算、文件操作、内存管理等功能。它为C程序员提供了一些常用的工具和函数&#xff0c;使得他们可以更方便地开发和调试程序。 当你的计算机缺少msvcp140.dll文件时&#xff0c;可能…

怎么把几秒的视频变成gif?视频转gif图片教程分享

无论是一段有趣的宠物视频、搞笑的表演片段&#xff0c;还是喜欢的电影或电视剧片段&#xff0c;通过gif形式分享&#xff0c;能够更好地吸引用户的关注、传递情感&#xff0c;并在社交媒体上引发互动与共鸣&#xff0c;那么如何才能将一段几秒钟的视频转gif图片&#xff08;ht…

VoxWeekly|The Sandbox 生态周报|20230731

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》

阿丹&#xff1a; Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…

活动发布报名平台型公众号开源版开发

活动发布报名平台型公众号开源版开发 后台管理、手机端自由发布活动&#xff01; 为个人、企业或主办方举办各类活动提供一个发布推广与活动报名平台&#xff0c;主办方可以在平台进行活动发布&#xff0c;用户可以免费注册并灵活使用该系统的发布、报名管理、核销等功能。 功能…

Matlab绘图 图例legend 太长,怎么减小指示线的长度

来源 绘图时&#xff0c;稍微减小文字已经不能正常放下图例&#xff0c;想通过调整图例指示线段长度缩减整个图例长度。 方法一 参考matlab官方论坛 leg legend(Plot1,Plot2,...); leg.ItemTokenSize [x1,x2]; By default x130 and x218 so put larger or smaller number…

AI Chat 设计模式:13. 代理模式

本文是该系列的第十三篇&#xff0c;采用问答式的方式展开&#xff0c;和前面的文章有一些不同&#xff0c;我不再进行提问了&#xff0c;改为由 GPT 1 号提问&#xff0c;GPT 2 号作答&#xff0c;每一节的小标题是我从 GPT 1 号的提问中总结出来的。我现在是完完全全的旁观者…

[保研/考研机试] 猫狗收容所 C++实现

题目描述&#xff1a; 输入&#xff1a; 第一个是n&#xff0c;它代表操作序列的次数。接下来是n行&#xff0c;每行有两个值m和t&#xff0c;分别代表题目中操作的两个元素。 输出&#xff1a; 按顺序输出收养动物的序列&#xff0c;编号之间以空格间隔。 源代码&#xff…