首页 > 其他分享 >队列

队列

时间:2022-08-27 22:37:45浏览次数:43  
标签:qu 队列 lqu int front QNode rear

一、结构体定义

1.顺序队

typedef struct
{
	int data[maxSize];
	int front,rear;
}SqQueue;

2.链队

(1)队结点类型

typedef struct QNode
{
	int data;
	struct QNode *next;
}QNode;

(2)链队定义

typedef struct
{
	QNode *front,*rear;
}LiQueue;

二、顺序队操作(循环队列)

1.队空

qu.rear==qu.front;

2.队满

(qu.rear+1)%maxSize==qu.front;

3.进队

int enQueue(SqQueue &qu,int x)
{
	if((qu.rear+1)%maxSize==qu.front)
		return 0;
	qu.rear=(qu.rear+1)%maxSize;
	qu.data[qu.rear]=x;
	return 1;
}

4.出队

int deQueue(SqQueue &qu,int x)
{
	if(qu.front==qu.rear) 
		return 0;
	qu.front=(qu.front+1)%maxSize;
	x=qu.data[qu.front];
	return 1;
}

三、链队操作

1.队空

lqu->rear==NULL; //(或lqu->front==NULL)

2.队满

//不存在(假设内存无限大)

3.初始化

void initQueue(LiQueue *&lqu)
{
	lqu=(Liqueue*)malloc(sizeof(LiQueue));
	lqu->front=lqu->rear=NULL;
}

4.入队

void enQueue(LiQueue *lqu,int x)
{
	QNode *p;
	p=(QNode*)malloc(sizeof(QNode));
	p->data=x;
	p->next=NULL;
	
	if(lqu->rear==NULL) //若队列为空,新结点既是队首结点,又是队尾结点
		lqu->front=lqu->rear=p;
	else
	{
		lqu->rear->next=p;
		lqu->rear=p;
	}
}

5.出队

int deQueue(LiQueue *&lqu,int &x)
{
	QNode *p; //仅用来释放空间
	if(lqu->rear==NULL)
		return 0;
		
	p=lqu->front;
	if(lqu->front==lqu->rear) //队列中只有一个结点时出队操作需要特殊处理
		lqu->front=lqu->rear=NULL;
	else 
		lqu->front=lqu->front->next;
	x=p->data;
	free(p);
	return 1;
}

标签:qu,队列,lqu,int,front,QNode,rear
From: https://www.cnblogs.com/unravel-CAT/p/16631570.html

相关文章

  • 消息队列面试题
             ......
  • 优先队列-多路归并系列题解
    373.查找和最小的K对数字问题描述给定两个以升序排列的整数数组nums1和nums2 , 以及一个整数k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来......
  • asyncio队列 asyncio.Queue()
    importasyncio#如果maxsize小于等于零,则队列尺寸是无限的。#如果是大于0的整数,则当队列达到maxsize时,awaitput()将阻塞至某个元素被get()取出Q=async......
  • 优先队列-2386. 找出数组的第 K 大和
    问题描述给你一个整数数组nums和一个正整数k。你可以选择数组的任一子序列并且对其全部元素求和。数组的第k大和定义为:可以获得的第k个最大子序列和(子序......
  • LeetCode 232. 用栈实现队列
    思路:用两个栈实现队列pop操作,若out栈为空则先将in中元素push进out,再pop出out中元素peek操作,直接调用pop,在将pop出元素push进outclassMyQueue{public:stack<int......
  • 消息队列常见问题总结
    消息队列常见问题总结作者:Grey原文地址:博客园:消息队列常见问题总结CSDN:消息队列常见问题总结说明本文是极客时间消息队列高手课的学习笔记消息队列的主要作用解......
  • leetcode225-用队列实现栈
    用队列实现栈classMyStack{LinkedList<Integer>list=newLinkedList<>();publicMyStack(){}publicvoidpush(intx){list.a......
  • Codeforces Round #710 (Div. 3) D. Epic Transformation(优先队列)
    https://codeforces.com/contest/1506/problem/D鉴定完毕,这题卡映射数量到优先队列的那一步操作给你一个由整数组成的长度为n的数组a。您可以对阵列应用由几个步骤组成......
  • 消息队列正确使用手册
    1.如何保证消息不丢失?消息确认机制2.如何保证消息只被消费一次?为了保证消息丢失,需要付出两方面的代价:一方面是性能的损耗,一方面可能造成消息重复消费。为了保证消息只......
  • SpringBoot使用RabbitMq实现队列和延时队列
    闲来无事看了看RabbitMq的队列,总结了一些队列的实现方法,当然,免不了各种看别人的博客哈哈哈其中延时队列有两种方式,一种是使用TTl+死信队列实现,一种是直接用RabbitMq的官方......