数据结构循环队列_循环队列的数据结构

数据结构循环队列_循环队列的数据结构循环队列代码如下:#include “pch.h”#include <iostream>using namespace std;#define MAXSIZE 5struct SqQueue{ char* Base; int front; int rear;};//初始化循环队列int initqueue(SqQueue &q){ q.Bas…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

循环队列

代码如下:


#include "pch.h"
#include <iostream>
using namespace std;
#define MAXSIZE 5

struct SqQueue
{ 
   
	char* Base;
	int front;
	int rear;
};

//初始化循环队列
int initqueue(SqQueue &q)
{ 
   
	q.Base = new char[MAXSIZE];
	if (!q.Base)
	{ 
   
		cout << "内存空间分配失败!" << endl;
		return 0;
	}
	q.front = q.rear = 0;
	return 1;
}
//求循环队列的长度
int getqueuelength(SqQueue q)
{ 
   
	return (q.rear - q.front + MAXSIZE) % MAXSIZE;
}
//求循环队列的头元素
char getqueuehead(SqQueue q)
{ 
   
	return q.Base[q.front];		//q.front 是下标位置
}
//循环队列的入队
int insertqueue(SqQueue &q, char e)
{ 
   
	if ((q.rear+1)%MAXSIZE==q.front)//这样队列就满了
	{ 
   
		cout << "队列已满,无法继续插入队列!" << endl;
		return 0;
	}
	q.Base[q.rear] = e;
	q.rear = (q.rear + 1) % MAXSIZE;
	cout << "入队列成功!" << endl;
	return 1;
}
//循环队列的出队列
int outputqueue(SqQueue &q, char e)
{ 
   
	if (q.rear==q.front)
	{ 
   
		cout << "队列为空,无法出队列!" << endl;
		return 0;
	}
	e=q.Base[q.front];
	q.front = (q.front + 1) % MAXSIZE;
	cout << "出队列成功!" << endl;
	return 1;
}
int main()
{ 
   
	SqQueue q;
	initqueue(q);
	insertqueue(q, 'a');
	insertqueue(q, 'b');
	insertqueue(q, 'c');
	cout << getqueuehead(q) << endl;;
	char c='a';
	outputqueue(q,c);
	cout << getqueuehead(q) << endl;
	outputqueue(q, c);
	cout << getqueuehead(q) << endl;
	cout << "循环队列的长度为:" << getqueuelength(q) << endl;
	return 0;
}

结果为:
在这里插入图片描述

链队列

代码如下:

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

//链队列
typedef struct qnode
{ 
   
	char data;
	qnode *next;
}*queueper;

//头指针和尾指针
struct linkqueue
{ 
   
	queueper front;		//队列的尾指针
	queueper rear;		//队列的头指针
};
//初始化队列
int initlinkqueue(linkqueue &q)
{ 
   
	//创建新节点设置为头,队尾队头志向该节点
	q.front = q.rear = new qnode;
	q.rear->next = NULL;//头结点指针域设置为空
	return 0;
}
//获取队列的头元素
char getqueueHead(linkqueue q)
{ 
   
	if (q.front!=q.rear)
	{ 
   
		return q.front->next->data;
	}
}
//链队列入队列
int insertelem(linkqueue &q,char e)
{ 
   
	queueper p;
	p = new qnode;
	p->data = e;
	p->next = NULL;
	q.rear->next = p;	//将新节点插入到队列的尾部(后插法)
	q.rear = p;			//尾指针指向尾结点
	cout << "队列入队成功!" << endl;
	return 0;
}
//链队列出队列
int outputqueue(linkqueue &q, char &e)
{ 
   
	queueper p;
	if (q.rear==q.front)
	{ 
   
		cout << "队列为空,无法出队列!" << endl;
		return 0;
	}
	p = q.front->next;		//指向队头元素
	e = p->data;			//得到队头元素的数据域
	q.front->next = p->next;//修改头指针
	if (q.front==p)
	{ 
   
		q.rear = q.front;
	}
	delete p;
	cout << "出队列成功!" << endl;
	return 1;
}
int main()
{ 
   
	linkqueue q;
	initlinkqueue(q);
	insertelem(q, 'a');
	insertelem(q, 'b');
	insertelem(q, 'c');
	insertelem(q, 'd');
	cout << "队列的头元素为:" << getqueueHead(q) << endl;
	char e = 'a';
	outputqueue(q, e);
	cout << "队列的头元素为:" << getqueueHead(q) << endl; 
	outputqueue(q, e);
	cout << "队列的头元素为:" << getqueueHead(q) << endl;
	return 0;

结果为:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170979.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?

    java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?你知道java异步调用方法都有哪些吗?下面的文章内容,就对这方面的问题做了一下整理,一起来看看java异步调用的方法吧!1、利用Spring的异步方法去执行注:没有返回值在启动类又或者是配置类加上@EnableAsync注解。packageme.deweixu.aysncdemo;importorg.springframework.boot.SpringApplication;importo…

    2022年7月11日
  • 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?「建议收藏」

    数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?「建议收藏」先说结论比较次数与序列初态无关的算法是:二路归并排序、简单选择排序、基数排序比较次数与序列初态有关的算法是:快速排序、直接插入排序、冒泡排序、堆排序、希尔排序排序趟数与序列初态无关的算法是:直接插入排序、折半插入排序、希尔排序、简单选择排序、归并排序、基数排序排序趟数与序列初态有关的算法是:冒泡排序、快速排序关于排序趟数插入排序、选择排序趟数都是固定的n-1。对于插入排序来说或,即使序列有序,也要依次从第二个元素开始,向前找它的插入位置。冒泡排序趟数与数据有关,优

    2022年8月23日
  • 怎么退出vi编辑界面_centos保存退出vim

    怎么退出vi编辑界面_centos保存退出vim@Linux基础学习如何退出vi编辑页面background今天在虚拟机上练习如何自动挂载的时候,按照提示在命令行输入vi/etc/fstab,如下图:回车之后进入编辑器界面,如图:由于误操作将这个编辑器内的内容修改了,可是我并不想修改任何内容,然后摸索半天也不知道如何撤销修改,或者说不保存退出,于是我在网上寻找到了一些答案。方法网上的方法是按ESC键跳到命令模式,但我在我的虚…

    2022年9月29日
  • RabbitMQ基础介绍与在java中使用-入门「建议收藏」

    RabbitMQ基础介绍与在java中使用-入门「建议收藏」前言:MQ做应用解耦,流量削峰这些是常识,RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库常用的主流的MQ有四个ActiveMQ:Apache下的一个子项目。使用Java完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,少量代码就可以高效地实现高级应用场景。可插拔的传输协议支持,比如:

    2022年10月3日
  • 【报错解决办法】ModuleNotFoundError: No module named ‘numba‘[通俗易懂]

    【报错解决办法】ModuleNotFoundError: No module named ‘numba‘[通俗易懂]numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。python之所以慢,是因为它是靠CPython编译的,numba的作用是给python换一种编译器。numba可以基于llvm动态生成优化代码,提高python的执行效率,只需要给python代码加上修饰器就好了。如果遇到ImportError:Nomodulenamednumba这样的问题,安装nu

    2022年10月23日
  • ROS机器人里程计模型

    ROS机器人里程计模型3.5移动机器人系统模型相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Areyouready?没准备好也开始了。3.5.1常用坐标系系统模型在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XRYROR、传感器坐标系XSYSOS

    2022年6月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号