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

数据结构循环队列_循环队列的数据结构循环队列代码如下:#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;

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 数据结构:图的存储结构之邻接矩阵「建议收藏」

    数据结构:图的存储结构之邻接矩阵「建议收藏」图的邻接矩阵(AdjacencyMatrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:我们来看一个实例,图7-4-2的左图就是一个无向图。我们再来看一个有向图样例,如图7-4-3所示的左图。在图的术语中,我们提到了网的概念,也就

    2022年10月25日
  • ZTE E700 自用感受及软件推荐

    ZTE E700 自用感受及软件推荐ZTEE700自用感受及软件推荐声明声明:此帖是转的  前两天看到移动08年新出的承诺话费换手机业务,换了个折扣最高的ZTEE700,首先声明我用的手机并不是很多,所以说错了希望大家见谅。这个机器我非常满意,非常好用!质量没得说,我从手里掉到水泥地上机器翻了3个跟头拿起来一点问题都没有。内置功能很强大,不过扩展功能则比较残废,好在机器本身的功能就能满足90%以上人的需求了,游戏…

  • 奇妙的go语言(聊天室的开发)

    奇妙的go语言(聊天室的开发)

  • python执行测试用例_测试用例执行结果有哪些

    python执行测试用例_测试用例执行结果有哪些前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

  • QMovie的使用

    QMovie的使用QMovie是一个可以存放动态视频的类今天第一次使用,记录一下一般是配合QLabel使用的,可以用来存放GIF动态图 m_background=newQLabel(this);m_background->setGeometry(0,0,MENU_WINDOW_WIDTH,MENU_WINDOW_HEIGHT);QMovie*backgroundMovie=newQMovie(“:/images/menu/MenuBackground.gif”,QByteArra

  • 并发编程篇:java 高并发面试题

    并发编程篇:java 高并发面试题1、线程与进程进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是…

发表回复

您的电子邮箱地址不会被公开。

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