数据结构与算法-栈和队列小练习

news2024/11/16 19:44:57

在这里插入图片描述

🌞 这里给大家分享一道栈的练习和一道队列的练习!

🎈1.练习一

利用栈的基本操作实现将任何一个十进制整数转化为R进制整数。

🔭1.1栈的初始化

Sqstack::Sqstack()
{
	base = top = new SElemType[InitStacksize];
	stacksize = InitStacksize;
}

🔭1.2入栈操作

void Sqstack::push(SElemType e)
{
	if (top - base == stacksize)
	{
		SElemType* base1 = new SElemType[stacksize + increment];
		int i = 0;
		for (i = 0; i < InitStacksize; i++)
		{
			base1[i] = base[i];
		}
		delete[]base;
		base = base1;
		top = base + stacksize;
		stacksize += increment;
	}
	*top++ = e;
}

🔭1.3出栈操作

SElemType Sqstack::pop()
{
	if (base == top)
		throw runtime_error("栈为空!");
	return *(--top);
}
bool Sqstack::isEmpty()
{
	if (base == top)
		return 1;
	else
		return 0;
}

🔭1.4销毁栈

~Sqstack()
	{
		delete[]base;
		stacksize = 0;
	}

🔭1.5进制转换函数

void Sqstack::conversion()
{
	long int n = 0;
	cout << "请输入十进制数:";
	cin >> n;
	SElemType b = 0;
	cout << "请输入要转换的进制:";
	cin >> b;
	Sqstack s;
	SElemType e;
	char a = 'A';
	while (n)
	{
		e = n % b;
		s.push(e);
		n /= b;
	}
	while (!s.isEmpty())
	{
		e = s.pop();
		if (e >= 10)
		{
			a = 'A';
			a = a + e - 10;
			cout << a;
		}
		else
		{
			cout << e;
		}
	}
	cout << endl;
}

🔭1.6判空函数

bool Sqstack::isEmpty()
{
	if (base == top)
		return 1;
	else
		return 0;
}

🔭1.7全部代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#define InitStacksize 100
#define increment 10
//利用栈的基本操作实现将任何一个十进制整数转化为R进制整数
typedef int SElemType;
class Sqstack
{
private:
	SElemType* base;//栈底指针
	SElemType* top;//栈顶指针
	int stacksize;//栈容量
public:
	Sqstack();
	~Sqstack()
	{
		delete[]base;
		stacksize = 0;
	}
	void push(SElemType e);
	SElemType pop();
	void conversion();
	bool isEmpty();
};
Sqstack::Sqstack()
{
	base = top = new SElemType[InitStacksize];
	stacksize = InitStacksize;
}
void Sqstack::push(SElemType e)
{
	if (top - base == stacksize)
	{
		SElemType* base1 = new SElemType[stacksize + increment];
		int i = 0;
		for (i = 0; i < InitStacksize; i++)
		{
			base1[i] = base[i];
		}
		delete[]base;
		base = base1;
		top = base + stacksize;
		stacksize += increment;
	}
	*top++ = e;
}
SElemType Sqstack::pop()
{
	if (base == top)
		throw runtime_error("栈为空!");
	return *(--top);
}
bool Sqstack::isEmpty()
{
	if (base == top)
		return 1;
	else
		return 0;
}
void Sqstack::conversion()
{
	long int n = 0;
	cout << "请输入十进制数:";
	cin >> n;
	SElemType b = 0;
	cout << "请输入要转换的进制:";
	cin >> b;
	Sqstack s;
	SElemType e;
	char a = 'A';
	while (n)
	{
		e = n % b;
		s.push(e);
		n /= b;
	}
	while (!s.isEmpty())
	{
		e = s.pop();
		if (e >= 10)
		{
			a = 'A';
			a = a + e - 10;
			cout << a;
		}
		else
		{
			cout << e;
		}
	}
	cout << endl;
}
int main()
{
	Sqstack a;
	a.conversion();
	return 0;
}

✅运行示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🎈2.练习二

利用循环队列实现.约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到k的那个人出圈;他的下一个人又从1开始报数,数到k的那个人出圈;
依此规律重复下去,直到圆桌周围的人只剩最后一个。模拟该游戏,并输出出圈顺序。

🔭2.1循环队列初始化

SqQueue::SqQueue()
{
	base = new QElemType[QueueSize];
	front = rear = 0;
}

🔭2.2队列销毁

~SqQueue()
	{
		delete[]base;
		front = rear = 0;
	}

🔭2.3入队操作

void SqQueue::EnQueueu(QElemType e)
{
	if (front == (rear + 1) % QueueSize)
		return;
	else
	{
		base[rear] = e;
		rear = (rear + 1) % QueueSize;
	}
}

🔭2.4出队操作

void SqQueue::DeQueue()
{
	QElemType e;
	if (rear == front)
		return;
	else
	{
		e = base[front];
		front = (front + 1) % QueueSize;
	}
}

🔭2.5队列判空

QElemType SqQueue::IsEmpty()
{
	if (front == rear)
		return 1;
	else
		return 0;
}

🔭2.6队列长度

QElemType SqQueue::length()
{
	return (rear - front + QueueSize) % QueueSize;
}

🔭2.7获取队头元素

QElemType SqQueue::GetHead()
{
	if (front == rear)
		return 0;
	else
		return base[front];
}

🔭2.8约瑟夫环函数

void SqQueue::yuesefu()
{
	int n = 0, k = 0;
	cout << "输入人数: ";
	cin >> n;
	cout << "输入第几个人出局:";
	cin >> k;
	SqQueue S;
	int i = 0;
	for (i = 1; i <= n; i++)
	{
		S.EnQueueu(i);
	}
	for (i = 1; i < k; i++)
	{
		QElemType temp = S.base[S.front];
		S.DeQueue();
		S.EnQueueu(temp);
	}
	int count = 1;
	while (!S.IsEmpty())
	{
		if (count < k)
		{
			QElemType temp = S.base[S.front];
			S.DeQueue();
			S.EnQueueu(temp);
			count++;
		}
		if (count == k)
		{
			cout << S.GetHead() << " ";
			S.DeQueue();
			count = 1;
		}
	}
	cout << endl;
}

🔭2.9全部代码

/*利用循环队列实现.约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到k的那个人出圈;他的下一个人又从1开始报数,数到k的那个人出圈;
依此规律重复下去,直到圆桌周围的人只剩最后一个。模拟该游戏,并输出出圈顺序。*/
#define _CRT_SECURE_NO_WARNINGS 1
#define QueueSize 100
#include <iostream>
using namespace std;
typedef int QElemType;
class SqQueue
{
private:
	QElemType* base;
	int front;
	int rear;
public:
	SqQueue();
	~SqQueue()
	{
		delete[]base;
		front = rear = 0;
	}
	void EnQueueu(QElemType e);
	void DeQueue();
	QElemType IsEmpty();
	void yuesefu();
	QElemType GetHead();
};
SqQueue::SqQueue()
{
	base = new QElemType[QueueSize];
	front = rear = 0;
}
void SqQueue::EnQueueu(QElemType e)
{
	if (front == (rear + 1) % QueueSize)
		return;
	else
	{
		base[rear] = e;
		rear = (rear + 1) % QueueSize;
	}
}
void SqQueue::DeQueue()
{
	QElemType e;
	if (rear == front)
		return;
	else
	{
		e = base[front];
		front = (front + 1) % QueueSize;
	}
}
QElemType SqQueue::IsEmpty()
{
	if (front == rear)
		return 1;
	else
		return 0;
}
QElemType SqQueue::GetHead()
{
	if (front == rear)
		return 0;
	else
		return base[front];
}
void SqQueue::yuesefu()
{
	int n = 0, k = 0;
	cout << "输入人数: ";
	cin >> n;
	cout << "输入第几个人出局:";
	cin >> k;
	SqQueue S;
	int i = 0;
	for (i = 1; i <= n; i++)
	{
		S.EnQueueu(i);
	}
	for (i = 1; i < k; i++)
	{
		QElemType temp = S.base[S.front];
		S.DeQueue();
		S.EnQueueu(temp);
	}
	int count = 1;
	while (!S.IsEmpty())
	{
		if (count < k)
		{
			QElemType temp = S.base[S.front];
			S.DeQueue();
			S.EnQueueu(temp);
			count++;
		}
		if (count == k)
		{
			cout << S.GetHead() << " ";
			S.DeQueue();
			count = 1;
		}
	}
	cout << endl;
}
int main()
{
	SqQueue S;
	S.yuesefu();
	return 0;
}

✅运行示例:
在这里插入图片描述
在这里插入图片描述

好啦,关于栈和队列的小练习到这里就结束啦,后期会继续更新数据结构与算法的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

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

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

相关文章

Golang笔记

01 = 和 := 的区别? 前者是赋值变量,后者是定义变量 02 指针的作用 指针指向变量的地址,在64位机器上占8个字节 【1 字节(Byte)= 8 位(bit) 1 千字节(KB,Kilobyte)= 1,024 字节(2^10 字节)】 作用 取址然后取值swap函数 交换变量的值指针接收器来改变结构体里面…

C#实现文本生成音频文件并播放

本文将使用C#实现一个简单的winfrom窗体应用程序&#xff0c;可以自定义文本转换为声音进行播放&#xff0c;生成音频文件。采用Microsoft提供的SpeechSynthesizer类来实现这个功能。 首先需要在代码中引用System.Speech.Synthesis命名空间&#xff0c;就可以使用SpeechSynthes…

项目管理与SSM框架(二)| Spring

Spring简介 Spring是一个开源框架&#xff0c;为简化企业级开发而生。它以IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面&#xff09;为思想内核&#xff0c;提供了控制层 SpringMVC、数据层SpringData、服务层事务管理等众多技术&#xff0c;并可以整合众多…

量化:概率统计基础

文章目录 分布四个矩 分布 将股票收益率看作一个随机变量。如中国平安某段时间涨跌幅分布如下 四个矩 一阶矩&#xff1a;即均值&#xff0c;在统计学中叫做期望。 二阶矩&#xff1a;即方差&#xff0c;反映了数据偏离均值的程度。 偏度&#xff1a;衡量随机变量分布的左右…

VSCode远程开发插件,值得一试

今天给大家介绍一下 VS Code 实现远程办公的方法。 1、概 述 通常&#xff0c;我们都是每天到工作的办公室进行办公&#xff0c;但是&#xff0c;如果下班回家&#xff0c;或者出差&#xff0c;此时如果马上需要重要的文件&#xff0c;或者升级一下代码&#xff0c;是不…

NetCore/Net8下使用Redis的分布式锁实现秒杀功能

目的 本文主要是使用NetCore/Net8加上Redis来实现一个简单的秒杀功能&#xff0c;学习Redis的分布式锁功能。 准备工作 1.Visual Studio 2022开发工具 2.Redis集群&#xff08;6个Redis实例&#xff0c;3主3从&#xff09;或者单个Redis实例也可以。 实现思路 1.秒杀开始…

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Jupyter Notebook环境PyCharm环境MATLAB环境 模块实现1. 数据预处理1&#xff09;常规赛数据处理2&#xff09;季后赛数据处理 相关其它博客工程源代码下载其它资料下载 前言 本项目使用了从NBA官方网站获得的数…

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 特征提取3. 模型训练及评估1&#xff09;常规赛预测模型2&#xff09;季后赛模型创建 4. 模型训练准确率 相关其它博客工程源代码下载其它资料下载 前言 本项目使用了从NBA官方网站获得的数据&…

如何使用 Disco 将黑白照片彩色化

Disco 是一个基于视觉语言模型&#xff08;LLM&#xff09;的图像彩色化工具。它使用 LLM 来生成彩色图像&#xff0c;这些图像与原始黑白图像相似。 本文将介绍如何使用 Disco 将黑白照片彩色化。 使用 Disco 提供了一个简单的在线演示&#xff0c;可以用于测试模型。 访问…

关于gt_sampling的理解

pcdet/datasets/augmentor/data_augmentor.py def gt_sampling(self, configNone):db_sampler database_sampler.DataBaseSampler(root_pathself.root_path,sampler_cfgconfig,class_namesself.class_names,loggerself.logger)return db_sampler此函数指向DataBaseSampler类&a…

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅱ—— 创建和添加证书模板

目录 博文摘要3. 使用 Microsoft 证书颁发机构创建 Machine SSL 和 Solution User 证书模板3.1 打开 Certificate Template Console3.2 复制模板3.3 修改 Compatibility 选项卡3.4 修改 General 选项卡3.5 修改 Extensions 选项卡3.6 修改 Subject Name 选项卡3.7 确认新模板 4…

【送书福利-第十九期】《C++ Core Guidelines解析》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Ant Eclipse插件使用

Eclipse默认带了ant插件 编辑build.xml文件给出提示 编辑的时候&#xff0c;会给出提示&#xff0c;方便编辑&#xff1a; 将鼠标放在属性上方&#xff0c;会将属性的值显示出来&#xff1a; 在Eclipse中运行ant 运行默认的target build.xml文件的内容如下&#xff0c;…

编程入门到精通:开源学习资料整理 | 开源专题 No.37

ascoders/weekly Stars: 24.8k License: NOASSERTION 前端精读是一个每周更新的前端好文精选项目。该项目涵盖了多个领域&#xff0c;包括结合大厂工作经验解读的前沿技术、源码解读、一些后端技术解读和商业思考等内容。主要功能是为开发者提供优质的文章资源&#xff0c;帮…

springBoot web开发自动配置和默认效果

web开发自动配置和默认效果 自动配置默认配置 自动配置 绑定了配置文件的一堆配置项 1、springMVC的所有配置 spring.mvc 2、Web场景通用配置 spring.web 3、文件上传配置 spring.servlet.multipart 4、服务器的配置serve: 比如&#xff1a;编码方式等 默认配置 重要&#xf…

【异常、线程】全网最详细解读

【异常、线程】 主要内容 异常、线程 教学目标 能够辨别程序中异常和错误的区别 说出异常的分类 说出虚拟机处理异常的方式 列举出常见的三个运行期异常 能够使用try…catch关键字处理异常 能够使用throws关键字处理异常 能够自定义异常类 能够处理自定义异常类 说出进程的概…

python案例:六大主流小说平台小说下载

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 很多小伙伴学习Python的初衷就是为了爬取小说&#xff0c;方便又快捷~ 辣么今天咱们来分享6个主流小说平台的爬取教程~ 一、流程步骤 流程基本都差不多&#x…

Pi-hole:Linux 硬件级别的广告拦截器 | 开源日报 No.58

pi-hole/pi-hole Stars: 44.0k License: NOASSERTION Pi-hole 是一个通过自己的 Linux 硬件实现网络广告拦截的 DNS 陷阱&#xff0c;无需安装任何客户端软件即可保护设备免受不需要的内容干扰。 安装简单&#xff1a;对话框引导您在十分钟内完成简单安装过程坚决有效&#…

Linux进程上下文切换:理解特权模式和进程切换

Linux进程上下文切换&#xff1a;理解特权模式和进程切换 在Linux中&#xff0c;进程的运行空间被划分为内核空间和用户空间&#xff0c;而从用户态向内核态转换需要进行系统调用。这一过程中发生了两次CPU上下文切换&#xff1a; 00001. 保存用户态&#xff1a;将CPU寄存器…

数组之移除元素

本文旨在复习巩固 此题为leetcode上的27题 数组的元素在内存地址中是连续的&#xff0c;不能单独删除数组中的某个元素&#xff0c;只能覆盖。 1 暴力解法 如图所示&#xff0c;该方法是十分麻烦的&#xff0c;因为每次找到val&#xff0c;都要删除它&#xff0c;让后面的元…