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

数据结构循环队列_循环队列的数据结构循环队列代码如下:#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)
上一篇 2022年8月18日 上午9:00
下一篇 2022年8月18日 上午9:00


相关推荐

  • 0x80 的具体解释

    0x80 的具体解释0x800x 是 C 语言中 16 进制数的表示方法 0x80 等于十进制的 1280×80 在计算机内部表示为字符在计算机中以其 ASCII 码方式表示 nbsp 其长度为 1 个字节 有符号字符型数取值范围为 128 127 无符号字符型数到值范围是 0 255 因此在 TurboC 语言中 字符型数据在操作时将按整型数处理 如果某个变量定义成 char 则表明该变量是

    2026年3月17日
    2
  • web漏洞扫描软件_web漏洞扫描原理

    web漏洞扫描软件_web漏洞扫描原理现在有许多消息令我们感到Web的危险性,如《看Web如何摧毁你的企业》和《微软Office安全漏洞网民即将面临最大威胁》等文章,因此,当前如何构建一个安全的Web环境成为网管员和安全管理员们义不容辞的责任。但是巧妇难为无米之炊,该选择哪些安全工具呢?扫描程序可以在帮助造我们造就安全的Web站点上助一臂之力,也就是说在黑客“黑”你之前,先测试一下自己系统中的漏洞。我们在此推荐10大Web漏

    2025年11月4日
    5
  • linux添加静态路由命令_linux route add永久路由

    linux添加静态路由命令_linux route add永久路由linux下静态路由修改命令方法一:添加路由routeadd-net192.168.0.0/24gw192.168.0.1routeadd-host192.168.1.1dev192.168.0.1删除路由routedel-net192.168.0.0/24gw192.168.0.1add增加路由del删除路由-net设置到某…

    2022年10月4日
    7
  • luajit缺点_luajit和lua区别

    luajit缺点_luajit和lua区别作者:paintsnow链接:https://www.zhihu.com/question/49144449/answer/123116906来源:知乎著作权归作者所有,转载请联系作者获得授权。其实我是不主张在开发时就用LuaJIT的,因为这样会把人养懒……因为JIT的强大性能,掩盖了太多代码中的低效实现,反而最后想要提升性能已经不可能了==回到正题,我的建议是,如果

    2022年10月6日
    5
  • python文件句柄_Python 文件操作学习 就是这么简单!-文件句柄

    python文件句柄_Python 文件操作学习 就是这么简单!-文件句柄一、前言Python对文件的操作是相当简单的。二、文件操作函数的介绍Python通过open函数来打开文件,语法如下open(file,mode=‘r’,buffering=None,encoding=None,errors=None,newline=None,closefd=True)可以看到,除了第一个file参数是必须的,其它都是可选的。1、file:操作的文件2、mode:操…

    2022年10月18日
    6
  • Vue引入外部Js文件并使用方法超级无敌详细的教程「建议收藏」

    Vue引入外部Js文件并使用方法超级无敌详细的教程「建议收藏」Vue引入外部Js文件使用新的js文件里面的一个方法,提高复用性。步骤:1):在新的js文件中写入新方法,如: (1)图2):在需要引入的xxx.vue文件中写上import别名from‘Js路径’; 这个别名是否需要加花括号,如:Import{别名}from‘Js路径’;需要参考新的js文件中,如(1)图的kayang-app-sdk.js中的 (2)图 (3)图注:因为我这里是exportdefault所以引入的

    2022年10月8日
    10

发表回复

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

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