首页 > 其他分享 >顺序循环队列(只设尾指针和所含元素个数)

顺序循环队列(只设尾指针和所含元素个数)

时间:2023-02-13 11:35:24浏览次数:44  
标签:设尾 队列 Queue int quelen SeQueue rear 指针

问题引入:

假设以一维数组elem[0…m-1]存储循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和队列中所含元素个数。
(1)说明该队列特点
(2)给出该循环队列的队空、队满条件
(3)编程实现入队列算法
(4)编程实现出队列算法

分析:

结构体:

typedef struct node {
	DataType elem[M];
	int rear;//队尾指针
	int quelen;//元素个数
}SeQueue;

SeQueue Q;

队空条件:Q.quelen == 0
队满条件:Q.quelen == M

代码实现:

LQueue.h:

#pragma once
typedef struct node {
	DataType elem[M];
	int rear;//队尾指针
	int quelen;//元素个数
}SeQueue;
//初始化
void Initiate(SeQueue *Q) {
	Q->quelen = 0;
	Q->rear = -1;
}
//入队列
int Insert(SeQueue &Q, DataType x)
{
	if (Q.quelen == M)//队列已满
	{
		printf("队列已满!");
		return 0;
	}
	Q.rear = (Q.rear + 1) % M;
	Q.elem[Q.rear] = x;
	Q.quelen++;
	return 1;
}
//出队列
int Delete(SeQueue &Q, DataType *x)
{
	if (Q.quelen == 0)//队列已空
	{
		printf("队列已空!");
		return 0;
	}
	*x = Q.elem[(Q.rear - Q.quelen + 1 + M)%M];
	Q.quelen--;
	return 1;
}


test.cpp

#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
constexpr auto M = 100;
#include"LQueue.h"
int main() {
	int x;
	SeQueue Queue;
	Initiate(&Queue);
	for (int i = 0; i < 10; i++)
	{
		Insert(Queue, i + 1);
	}
	int length = Queue.quelen;
	printf("出队列的顺序如下:\n");
	for (int i = 0; i < length; i++) {
		Delete(Queue, &x);
		printf("%d ", x);
	}

	return 0;
}

运行结果

先插入10个元素,再依次出队列
顺序循环队列(只设尾指针和所含元素个数)_队列

标签:设尾,队列,Queue,int,quelen,SeQueue,rear,指针
From: https://blog.51cto.com/u_15961549/6053826

相关文章

  • C语言--多级指针
    可以定义指针的指针保存其他指针变量的地址eg:Typev;Type*pv=&v;Type**ppv=&pv;Type***pppv=&ppv;...二维数组二维数组的本质就是一......
  • test29 指针进阶3-8
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<assert.h>#include<stdlib.h>#include<string.h>//一级指针接收地址或者指针voidprint(int*ptr,in......
  • C语言--指针与堆空间
    1.堆空间的本质--备用的“内存仓库”,以字节为单位预留的可用内存--程序可在需要时从“仓库”中申请使用内存(动态借)--当不需要再使用申请的内存时,需要及时归......
  • C语言--指针与函数
    1.深入函数--函数的本质是一段内存中的代码(占用一片连续内存)--函数拥有类型,函数类型有返回值和参数类型列表组成eg:intsun(intn)<==>int(int)......
  • Rust智能指针
    Rust智能指针https://course.rs/advance/smart-pointer/intro.htmlBox堆对象分配Box指针拥有内存对象的独占使用权(一)使用场景1.使用Box将数据存储在堆上fnmain(......
  • 代码随想录算法Day10 | 理论基础 232.用栈实现队列 225. 用队列实现栈
    理论基础栈是先进后出,队列是先进先出。如图所示。232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目请你仅使用两个栈实现先入先出队列。队列应当支......
  • C语言--指针与数组
    1.数组的本质就是一片连续的内存;2.一些事实-使用取地址操作符&获取数组的地址-数组名可看作一个指针,代表数组中0元素的地址-当指针指向数组元素时,可......
  • C语言--深入理解指针与地址
    1.初学指针的军规--Type*类型的指针只保存Type类型变量的地址--禁止不同类型的指针相互赋值注意:指针保存的地址必须是有效地址eg:inti=10;floa......
  • C语言--指针:一种特殊的变量
    1.因为是变量,所以用于保存具体值,特殊之处,指针保存的值是内存中的地址--内存地址:内存就是计算机中的存储部件,每个存储单元有固定唯一的编号--内存中存储单元的编......
  • C语言:指针 运行结果
    #include<stdio.h>//程序运行结果:【1】int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p=&a,*q=&b,*r;r=f......