前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >队列(顺序存储结构)

队列(顺序存储结构)

作者头像
废江_小江
发布2022-09-05 11:21:13
4450
发布2022-09-05 11:21:13
举报
文章被收录于专栏:总栏目
  • 自己写一个队列和教材上对比
  • 习题板块

自己写的队列

这里我新加了一个打印函数,并且我只写了循环队列,教材有两种,一种是循环队列,一种是顺序队列, 但是顺序队列实在太耗空间了,基本用不到,所以我就直接跳了

代码语言:javascript
复制
//自己写的队列(数组实现)
//因为非循环队列太耗空间了,我就直接写循环队列,其实区别很小,要注意的就两点:
//利用求余操作就可以实现:front=(front+1)%max   rear=(rear+1)%max
//例外需要注意的数组必须留一个空间,不能存满,为了方便判断队列满和队列空的情况 
//要写的操作有 :   初始化队列 :initqueue  ,  销毁队列: destroyqueue  ,  判断为空: emptyqueue
//  进队列 enqueue   , 出队列  dequeueu   打印队列 printqueue 
#include<bits/stdc++.h>
#define maxsize 100
using namespace std;
typedef int elemtype;//之前不喜欢这样写,觉得太麻烦了,后来我想把int换成char去写字符串匹配的时候,就爱上了这样的写法 
typedef struct{
	elemtype data[maxsize];
	int front,rear;
}squeue;
void initqueue(squeue*&q){
	q=(squeue*)malloc(sizeof(squeue));
	q->front=q->rear=0;  
}
void destroyqueue(squeue*&q){
	free(q);
}
bool emptyqueue(squeue*q){
	return (q->front==q->rear);
}
bool enqueue(squeue*&q,elemtype e){
	if((q->rear+1)%maxsize==q->front)
	return false;
	q->rear=(q->rear+1)%maxsize;
	q->data[q->rear]=e;
	return true;
}
bool dequeue(squeue*&q,elemtype &e){
	if(q->rear==q->front)
	return false;
	q->front=(q->front+1)%maxsize;
	e=q->data[q->front];//因为队列中必须空一个数,空的数我们让front指向 
	return true;
}
void printqueue(squeue*q){
	int pre=q->front;
	while(pre!=q->rear){
		pre=(pre+1)%maxsize;
		cout<<q->data[pre]<<" ";
	}
	cout<<endl;
}
int main(){
	squeue *q;
	elemtype e;
	initqueue(q);
	for(elemtype i=1;i<=10;i++)
	enqueue(q,i);
	printqueue(q);
	enqueue(q,5);
	enqueue(q,7);
	printqueue(q);
	dequeue(q,e);
	dequeue(q,e);
	dequeue(q,e);
	printqueue(q);
} 

教材标准队列(循环队列)

代码语言:javascript
复制
//顺序队列(环形队列)基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct 
{	
	ElemType data[MaxSize];
	int front,rear;		//队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q)
{	q=(SqQueue *)malloc (sizeof(SqQueue));
	q->front=q->rear=0;
}
void DestroyQueue(SqQueue *&q)
{
	free(q);
}
bool QueueEmpty(SqQueue *q)
{
	return(q->front==q->rear);
}
bool enQueue(SqQueue *&q,ElemType e)
{	if ((q->rear+1)%MaxSize==q->front)	//队满上溢出
		return false;
	q->rear=(q->rear+1)%MaxSize;
	q->data[q->rear]=e;
	return true;
}
bool deQueue(SqQueue *&q,ElemType &e)
{	if (q->front==q->rear)		//队空下溢出
		return false;
	q->front=(q->front+1)%MaxSize;
	e=q->data[q->front];
	return true;
}

教材标准队列(顺序队列)

代码语言:javascript
复制
//顺序队列(非环形队列)基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct 
{	
	ElemType data[MaxSize];
	int front,rear;						//队头和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q)
{	q=(SqQueue *)malloc (sizeof(SqQueue));
	q->front=q->rear=-1;
}
void DestroyQueue(SqQueue *&q)			//销毁队列
{
	free(q);
}
bool QueueEmpty(SqQueue *q)				//判断队列是否为空
{
	return(q->front==q->rear);
}
bool enQueue(SqQueue *&q,ElemType e)	//进队
{	if (q->rear==MaxSize-1)				//队满上溢出
		return false;					//返回假
	q->rear++;							//队尾增1
	q->data[q->rear]=e;					//rear位置插入元素e
	return true;						//返回真
}
bool deQueue(SqQueue *&q,ElemType &e)	//出队
{	if (q->front==q->rear)				//队空下溢出
		return false;
	q->front++;
	e=q->data[q->front];
	return true;
}

习题板块

废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:队列(顺序存储结构)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-04),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自己写的队列
  • 教材标准队列(循环队列)
  • 教材标准队列(顺序队列)
  • 习题板块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档