链式栈和队列以及重载,const,void(*)补充

2023-11-01

一:C++版链式栈和队列

1.1栈

#include<iostream>
#include<string>
using namespace std;

//抽象类
class stack
{
	
	//纯虚函数
public:
	virtual~stack()
	{

	}
	virtual void push(int data) = 0;
	virtual void pop() = 0;
	virtual int& getTop() = 0;
	virtual int sizeStack() const = 0;
	virtual bool isEmpty() const = 0;

};
struct Node
{
public:
	Node(int data, Node* next)
	{
		this->data = data;
		this->next = next;
	}
	int data;
	struct Node* next;
};
class pStackA :public stack{
public:
	pStackA()
	{
		size = 0;
		stackTop = nullptr;
	}
	~pStackA();
	void push(int data);
	void pop();
	int& getTop();
	int sizeStack() const ;
	bool isEmpty() const ;
protected:
	int size;
	Node *stackTop;
};
void pStackA::push(int data) 
{
	stackTop = new Node(data, stackTop);
	size++;
}
void pStackA::pop()
{
	if (!stackTop)
	{
		cout << "栈中无数据";
		return;
	}
	Node* headNode = stackTop->next;
	delete stackTop;
	stackTop = headNode;
	size--;
}
int& pStackA::getTop()
{
	return stackTop->data;
}
int pStackA::sizeStack() const
{
	return size;
}
bool pStackA::isEmpty() const
{
	return size == 0;
}
pStackA::~pStackA()
{
	while (stackTop)
	{
		Node* headNode = stackTop->next;
		delete stackTop;
		stackTop = headNode;
	}
}
int main()
{
	stack* p1 = new pStackA;
	p1->push(1);
	p1->push(2);
	while (!p1->isEmpty())
	{
		cout << p1->getTop() << " ";
		p1->pop();
	}
	return 0;
}

1.2队列

#include<iostream>
#include<string>
using namespace std;

class queue
{
public:
	virtual ~queue(){}
	virtual int queueSize() const = 0 ;
	virtual bool isEmpty() const = 0;
	virtual int& getFront() = 0;
	virtual int& getBack() = 0;
	virtual void push(const int element) = 0;
	virtual void pop() = 0;
};
struct  Node
{
	int data;
	Node* next;
	Node() {}
	Node(int data) :data(data) 
	{
		next = nullptr;
	}
	Node(int data, Node* next) :data(data), next(next) {}
};
class queueList:public queue
{
public:
	queueList()
	{
		size = 0;
		frontNode = backNode = nullptr;
	}
	~queueList()
	{
		while (frontNode != backNode)
		{
			Node* frontNextNode = frontNode->next;
			delete frontNode;
			frontNode = frontNextNode;
		}
	}
	int queueSize() const;
	bool isEmpty() const;
	int& getFront();
	int& getBack();
	void push(const int element);
	void pop();
protected:
	int size;
	Node* frontNode;
	Node* backNode;
};

int queueList::queueSize() const
{
	return size;
}
bool queueList::isEmpty() const
{
	return size == 0;
}
int& queueList::getFront()
{
	if (isEmpty())
	{
		cout << "队中无数据,不能出队" << endl;
		exit(0);
	}
	return frontNode->data;
}
int& queueList::getBack()
{
	if (isEmpty())
	{
		exit(0);
	}
	return frontNode->data;
}
void queueList::push(const int element)
{
	Node* newNode = new Node(element, nullptr);
	if (isEmpty())
	{
		frontNode = newNode;
	}
	else
		backNode->next = newNode;
	backNode = newNode;
	size++;
}
void queueList::pop()
{
	if (isEmpty())
	{
		exit(0);
	}
	Node* frontnextNode = frontNode->next;
	delete frontNode;
	frontNode = frontnextNode;
	size--;
}

int main()
{
	queue* Quene = new queueList;
	Quene->push(0);
	Quene->push(1);
	Quene->push(2);
	while (!Quene->isEmpty())
	{
		cout<<Quene->getFront();
		Quene->pop();
	}
	return 0;
}

二:++的运算符重载

前置++:		A& operator++()
后置++:		A  operator++(int)
#include<iostream>
#include<string>
using namespace std;

class A {
public:
	A() {}
	A(int data):data(data){}
	A& operator++()			//前置++运算符重载
	{
		this->data++;
		return *this;
	}
	A operator++(int)		//后置++需要加个int,后置++时不可以返回引用,因为temp是临时变量。
	{
		A temp;
		temp.data = this->data++;
		return temp;
	}
	void print()
	{
		cout << data << endl;
	}
protected:
	int data;
};

int main()
{
	A a(10);
	++a;
	a.print();
	A m = a++;
	m.print();
	return 0;
}

三:const的使用

在这里插入图片描述
此处错误,因为struct A中包含const 的成员变量属性,带有const的都必须以参数列表的形式来初始化,如下图所示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
①中两个没有区别
②中p,p1无区别,p2与之有区别
③中有区别
总结:当*在const 前面即 *const的时候如p4,该指针不可以再改变指向,永远只能指向p4, 当const * 时,指针依然可以改变指向。
在这里插入图片描述

四:void(*)

在这里插入图片描述

1,2都相当于调用print函数

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

链式栈和队列以及重载,const,void(*)补充 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 冷却系统故障导致微信功能异常?今天谈谈机房动力环境监控系统

    0 前言 3月29日凌晨 微信 QQ等腾讯旗下社交软件出现功能异常 据媒体报道 此次事故由广州电信机房冷却系统故障导致 腾讯将它定义为公司一级事故 腾讯管理层认为 这次事故暴露出容灾设计方案和应急预案不完善的隐患 有关业务部门的风险防范意识
  • 对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)

    目录 一 总述 二 登录页面测试 一些准备工作 验证页面显示是否正确 验证正常登录的情况 该过程中出现的问题 验证登录失败的情况 关于登录界面的总代码 测试视频 三 注册界面的自动化测试 测试代码 过程中出现的bug 测试视频 四 博客列表
  • hive连接报错-java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.security.UserG

    hive连接报错 java lang NoClassDefFoundError Could not initialize class org apache hadoop security UserGroupInformation 报错信息
  • 享学笔记:并发编程之多线程基础(一)

    一 创建多线程的三种方式 1 继承Thread类 重写run方法 class Demo extends Thread Override public void run System out println 这是一个子线程 Thread 启动
  • Linux搭建部署环境

    Linux搭建部署环境手册 说明 说明 该笔记是在linux上安装jdk mysql tomcat redis 以便于建立一个linux系统下的部署环境 建议 保留该安装笔记 以便于企业复用 ps 安装软件前必须得先有防火墙做端口的开放 软
  • 报错提示:未找到插件 ‘org.springframework.bootspring-boot-maven-plugin

    解决方法 到自己本地的Maven仓库中寻找如下路径 选一个版本号添加进去即可
  • 算法:dfs(深度优先搜索算法)

    dfs 暴搜 一条路走到黑 然后回溯 开启另一条路 再一条路走到黑 那么如何对暴搜进行优化 剪枝 当发现某一条树枝时不可能找到答案时 就没必要还在这条路走到黑一直搜索了 将这条树枝减去 趁早换一条路 如图 可以用递归来一条路走到黑 递归最恰
  • JeecgBoot获取当前登录用户信息

    前言 如果使用JeecgBoot项目进行开发的时候 有的场景需要获取当前登录人信息做一些逻辑操作 下面分享下通过前后端分别获取用户的方式 前端获取 本质是使用vuex进行获取 引入store import store from store
  • Java数字反转

    这道题非常像之前做过的一道题 求水仙花数 输出对应位的数字 这题不一样的在于带有小数点 但是除余没法留小数点上的数字 需要变整后除余 求末位数 求末位数 随后倒数第二位直接初余便可以得到 不要忘记和第一个数中间放一个小数点 由于题母给的是f
  • 分割问题中“类间竞争”是怎么回事

    softmax会返回多种不同类别 而sigmoid会得到二值结果 softmax的值域是 0 1 sigmoid的值域是 0 1 sigmoid可以看成是softmax的两类分类的特例
  • 2023华为OD机试真题-分苹果(JAVA、Python、C++)

    题目描述 A B两团体把苹果分为两堆 A盼望依照它的盘算规矩平分苹果 他的盘算规矩是依照二进制加法盘算 而且不盘算走位 12 5 9 1100 0101 9 B的盘算规矩是十进制加法 包含畸形进位 B盼望在满意A的情形下获取苹果分量最多 输
  • xss挑战之旅11关到13关,操作步骤配截图。

    level11 分析代码 相比上一关 多了一个str11 SERVER HTTP REFERER 验证的是http头部的xss注入 使用burp抓包 修改相应的字段 构造http头部referer的payload 头部本身没有Referer
  • 数据的中心化,标准化及意义

    在机器学习回归问题 以及训练神经网络过程中 通常需要对原始数据进行中心化 零均值化 与标准化 归一化 预处理 目的 通过中心化和标准化处理 最终得到均值为0 标准差为1的服从标准正态分布的数据 在多指标评价体系中 由于各评价指标的性质不同
  • OPENSSL ENGINE机制

    OPENSSL ENGINE机制 1 概念 OpenSSL项目是一个开放源代码安全项目 它的目标是开发一个健壮的 商业级的 完整的开放源代码的工具包 用强大的加密算法来实现安全的Socket层 Secure Sockets Layer SS
  • 弱口令招新赛靶机赛道WriteUp

    nmap sS p 22 oG 172 27 13 0 24 grep open 使用该命令扫描网段下开放22端口的主机 发现主机后 信息收集 得到两个开放的端口 22端口 服务为ssh服务 版本为7 6p1 服务器为ubuntu 此版本存
  • Vue3项目搭建教程(create-vue)

    什么是create vue create vue是一个脚手架工具 用来快速创建v3的项目 Vuecli用来创建v2的项目 介绍 Vue CLI create vue是Vue官方新的脚手架工具 底层切换到了 vite 下一代前端工具链 为开发
  • 2021全国省市区街道(乡镇)数据及编码(不包含港澳台)

    已按拼音首字母排序 共31省直辖市 342个城市 3352个区县 41206个街道 乡镇 安徽省 340000 安庆市 340800 安徽安庆经济开发区 340871 菱北街道 340871001 老峰镇 340871100 大观区 340
  • 嵌入式Linux应用开发完全手册(一)嵌入式Linux基础知识

    嵌入式Linux应用开发完全手册 3 嵌入式Linux基础知识 3 1 交叉编译工具 编译工具链 编译工作由几个步骤完成 分别用到了不同的工具 PC端应用 gcc ld objcopy objdump 交叉编译 编译和运行在不同的环境下 a
  • mysql 5.6 创建索引导致表锁阻塞查询

    今天遇到一个表锁 对表进行select操作阻塞 最后发现在表操作时的时候执行了创建索引 导致整个表锁了 测试如下 1 先执行一个慢查询 mysql gt select sleep 500 from order log 2 对表进行创建索引操
  • 链式栈和队列以及重载,const,void(*)补充

    一 C 版链式栈和队列 1 1栈 include