队列的基本操作(数据结构)

队列的顺序实现

#include <stdlib.h>
#include <iostream>
#include <stdio.h>#define MaxSize 10//定义队列的长度typedef struct{int front,rear;int data[MaxSize];
}SqQueue;//初始化队列
void InitQueue(SqQueue &Q){Q.front=Q.rear=0;
} //判断队列是否为空
bool QueueEmpty(SqQueue Q){if(Q.front==Q.rear) return true;//空队列else return false; 
}//入队
bool EnQueue(SqQueue &Q,int x){if((Q.rear+1)%MaxSize==Q.front){//判断队满return false; }Q.data[Q.rear]=x;//新元素入队 Q.rear = (Q.rear+1)%MaxSize;//队尾指针加一取模 让队列循环使用 return true;
} //出队
int DeQueue(SqQueue &Q){if(Q.front==Q.rear) return false;//队列为空 int x;x = Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;//对头指针后移 return x;
} //获取对头元素 
int GetHead(SqQueue &Q){if(Q.front==Q.rear) return false;int x;x = Q.data[Q.front];return x;
} //计算队列元素个数
int CountQueue(SqQueue &Q){if(Q.front==Q.rear) return false;int count;count = (Q.rear+MaxSize-Q.front)%MaxSize;return count;
}//输出栈 
bool PrintSqQueue(SqQueue &Q){if(Q.front==Q.rear) return false;for(int i=Q.front;i<Q.rear;i++)printf("%d ",Q.data[i]);printf("\n");return true;
}int main(){SqQueue Q;InitQueue(Q);printf("-----入队-----\n");EnQueue(Q,1);EnQueue(Q,2);EnQueue(Q,3);EnQueue(Q,4);EnQueue(Q,5);int count;count=CountQueue(Q);printf("队内元素个数为:%d\n",count);PrintSqQueue(Q);printf("-----出队-----\n");int x;x=DeQueue(Q);printf("%d出队\n",x);x=DeQueue(Q);printf("%d出队\n",x);x=DeQueue(Q);printf("%d出队\n",x);count=CountQueue(Q);printf("队内元素个数为:%d\n",count);PrintSqQueue(Q);return 0;
}

队列的链式实现

#include <stdlib.h>
#include <iostream>
#include <stdio.h>//链式队列结点 
typedef struct LinkNode{int data;struct LinkNode *next;
}LinkNode; //链式队列 
typedef struct{LinkNode *front,*rear;
}LinkQueue;//队列初始化(带头结点) 
void InitQueue1(LinkQueue &Q){Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));Q.front->next=NULL;
}//队列初始化(不带头结点)
void InitQueue2(LinkQueue &Q){Q.front=NULL;Q.rear=NULL;
} //判断队列是否为空(带头结点)
bool IsEmpty1(LinkQueue Q){if(Q.front==Q.rear) return true;else return false; 
} //判断队列是否为空(不带头结点)
bool IsEmpty2(LinkQueue Q){if(Q.front==NULL) return true;else false;
} //入队(带头结点)
void EnQueue1(LinkQueue &Q,int x){LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));s->data=x;s->next=NULL;Q.rear->next=s;//新节点插入到rear之后 Q.rear=s;//修改表尾指针 
} //入队(不带头结点)
void EnQueue2(LinkQueue &Q,int x){LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));s->data=x;s->next=NULL;if(Q.front==NULL){//空队列中插入第一个元素 Q.front=s;//修改队头队尾指针 Q.rear=s;}else{//新节点插入到rear结点之后 Q.rear->next=s;Q.rear=s;}
}//出队(带头结点) 
int DeQueue1(LinkQueue &Q){if(Q.front==Q.rear){//空 return false;}LinkNode *p=Q.front->next;int x;x=p->data;Q.front->next = p->next;if(Q.rear==p) Q.rear=Q.front;//最后一个结点出队,修改rear指针free(p);return x ;
} //出队(不带头结点)
int DeQueue2(LinkQueue &Q){if(Q.front==NULL) return false;//空 LinkNode *p=Q.front;int x;x=p->data; Q.front=p->next;//修改front指针 if(Q.rear==p){//最后一个结点出队 Q.front=NULL;Q.rear=NULL;}free(p);return x; 
} //打印队列 (带头结点)
void PrintQueue1(LinkQueue &Q)
{LinkNode *temp=Q.front->next;printf("打印队列:");while(temp){printf("%d ",temp->data);temp = temp->next;}printf("\n");
}//打印队列 (不带头结点)
void PrintQueue2(LinkQueue &Q)
{LinkNode *temp=Q.front;printf("打印队列:");while(temp){printf("%d ",temp->data);temp = temp->next;}printf("\n");
}int main(){printf("--------带头结点-------\n");LinkQueue Q;InitQueue1(Q);printf("开始进队列\n");EnQueue1(Q,1);EnQueue1(Q,2);EnQueue1(Q,3);EnQueue1(Q,4);EnQueue1(Q,5);PrintQueue1(Q);//打印队列 if (!IsEmpty1(Q)) printf("非空队列\n");else printf("空队列\n");int x;x=DeQueue1(Q);printf("%d出队列\n",x);x=DeQueue1(Q);printf("%d出队列\n",x);x=DeQueue1(Q);printf("%d出队列\n",x);PrintQueue1(Q);//打印队列 printf("--------不带头结点-------\n");LinkQueue P;InitQueue2(P);printf("开始进队列\n");EnQueue2(P,1);EnQueue2(P,2);EnQueue2(P,3);EnQueue2(P,4);EnQueue2(P,5);PrintQueue2(P);//打印队列 if (!IsEmpty2(P)) printf("非空队列\n");else printf("空队列\n");int y;y=DeQueue2(P);printf("%d出队列\n",y);y=DeQueue2(P);printf("%d出队列\n",y);y=DeQueue2(P);printf("%d出队列\n",y);PrintQueue2(P);//打印队列 return 0;
}

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

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

相关文章

通过async方式在浏览器中调用web worker

通过async方式在浏览器中调用web worker 近年来&#xff0c;网络应用程序变得越来越复杂&#xff0c;增加了越来越多的功能。因此&#xff0c;性能和响应性已成为 Web 开发人员关注的重点。解决这个问题的一个办法是使用web worker。 web worker简介 web worker是一个 javas…

wxpython:wx.grid 表格显示 Excel xlsx文件

pip install xlrd xlrd-1.2.0-py2.py3-none-any.whl (103 kB) 摘要: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files pip install wxpython4.2 wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB) Successfully installed wxpython-4.…

求和中x:y=g(x)的含义

概念解释 p ( y ) ∑ x : y g ( x ) p ( x ) p(y)\sum\limits_{x:yg(x)}p(x) p(y)x:yg(x)∑​p(x) 这个表达式表示随机变量 Y 的概率分布 p(y) 是通过对随机变量 X 进行函数映射 y g ( x ) y g(x) yg(x) 后得到的。让我更详细地解释&#xff1a; Y Y Y 和 X X X 是两个随…

微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动

(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…

【Aseprite像素画】如何取巧做到各种画面效果(小工具的各种技巧)

文章目录 参考链接&#xff1a;具体如下1、水中倒影2、参考图片3多个帧添加动画物品4多个帧删除动画物品5六毛钱受击效果6添加标签7导出特定标志的gif图8忽略标志帧&#xff0c;然后播放9轮廓线10多个图层轮廓线11洋葱皮12替换多个不同帧的色块簇13连接细胞14快速连续删除15冻结…

关于将对象转成JSON格式的一些问题

1.问题现象&#xff1a; 在ssm项目中&#xff0c;一个controller返回Msg对象&#xff08;自定义Javabean对象&#xff09;&#xff0c;然后利用SpringMVC的ResponseBody注解自动将Msg对象转化成JSON格式&#xff0c;返回给客户端&#xff0c;但是客户端接收到的json字符串只有…

SwiftUI 4.0:两种方式实现子视图导航功能

0. 概览 从 SwiftUI 4.0 开始&#xff0c;觉悟了的苹果毅然抛弃了已“药石无效”的 NavigationView&#xff0c;改为使用全新的 NavigationStack 视图。 诚然&#xff0c;NavigationStack 从先进性来说比 NavigationView 有不小的提升&#xff0c;若要如数家珍得单开洋洋洒洒…

高效的开发流程搭建

目录 1. 搭建 AI codebase 环境kaggle的服务器1. 搭建 AI codebase 环境 python 、torch 以及 cuda版本,对AI的影响最大。不同的版本,可能最终计算出的结果会有区别。 硬盘:PCIE转SSD的卡槽,, GPU: 软件源: Anaconda: 一定要放到固态硬盘上。 VS code 的 debug功能…

【NLP的python库(03/4) 】: 全面概述

一、说明 Python 对自然语言处理库有丰富的支持。从文本处理、标记化文本并确定其引理开始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到语义处理&#xff0c;例如识别命名实体、情感分析和文档分类&#xff0c;一切都由至少一个库提供。那么&#xff0c;你…

Pikachu-xxe (xml外部实体注入漏洞)过关笔记

Pikachu-xxe过关笔记 有回显探测是否有回显file:///协议查看本地系统文件php://协议查看php源代码&#xff08;无法查看当前网页代码&#xff0c;只能看别的&#xff09;http://协议爆破开放端口&#xff08;两者的加载时间不同&#xff09; 无回显第一步第二步第三步 运行结果…

SketchUp Pro 2023 for Mac——打造你的创意之城

SketchUp Pro 2023 for Mac是一款专业级的3D建模软件&#xff0c;为你提供最佳的设计和创意工具。不论你是建筑师、室内设计师&#xff0c;还是爱好者&#xff0c;SketchUp Pro都能满足你对于创意表达的需求。 SketchUp Pro 2023拥有强大而直观的界面&#xff0c;让你轻松绘制…

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及两个背包博客&#xff0c;或者你本人就已经懂得动规了。 1、动规思路简…

Java+Redis:布隆过滤器,打造高效数据过滤神器!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

postgresql16-新特性

postgresql16-新特性 any_value数组抽样数组排序 any_value any_value 返回任意一个值 select e.department_id ,count(*), any_value(e.last_name) from cps.public.employees e group by e.department_id ;数组抽样 -- 从数组中随机抽取一个元素 array_sample(数组&#…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍。

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

插上u盘显示格式化怎么办?U盘数据恢复可以这样做

U盘以其体积小巧、存储容量大、读写速度快的特点&#xff0c;在各种工作和个人使用场合中得到了广泛应用&#xff0c;因此深得用户好评。然而&#xff0c;在日常使用U盘的过程中&#xff0c;经常会遇到一些问题和挑战。 当我需要转移一些资料文件时&#xff0c;总是喜欢使用U盘…

基于spring boot的医疗管理系统 /基于java的医疗系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

一键智能视频语音转文本——基于PaddlePaddle语音识别与Python轻松提取视频语音并生成文案

前言 如今进行入自媒体行业的人越来越多&#xff0c;短视频也逐渐成为了主流&#xff0c;但好多时候是想如何把视频里面的语音转成文字&#xff0c;比如&#xff0c;录制会议视频后&#xff0c;做会议纪要&#xff1b;比如&#xff0c;网课教程视频&#xff0c;想要做笔记&…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类&#xff1a;指令并行处理 四、根据指令集架构&#xff08;ISA&#xff09;分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

【Kafka专题】Kafka收发消息核心参数详解

目录 前置知识课程内容一、从基础的客户端说起&#xff08;Java代码集成使用&#xff09;1.1 消息发送者源码示例1.2 消息消费者源码示例1.3 客户端使用小总结 *二、从客户端属性来梳理客户端工作机制*2.1 消费者分组消费机制2.2 生产者拦截器机制2.3 消息序列化机制2.4 消息分…