首页 > 其他分享 >队列的定义和基本操作的实现

队列的定义和基本操作的实现

时间:2024-09-14 12:23:18浏览次数:3  
标签:return 定义 队列 ElemType front 基本操作 LinkNode rear

写代码:定义顺序存储的队列(数组实现),要求数组空间可以被循环利用 
写代码:基于上述定义,实现“出队、入队、判空、判满”四个基本操作 
写代码:定义链式存储的队列(单链表实现) 
写代码:基于上述定义,实现“出队、入队、判空、判满”四个基本操作 

1.定义顺序存储的队列(数组实现),要求数组空间可以被循环利用  

2.出队、入队、判空、判满

#include <stdio.h>

#define MaxSize 50

typedef int ElemType;
typedef struct {
	ElemType data[MaxSize];//用于存储元素的数组 
	int front;//指向队列前端的指针 
	int rear;//指向队列后端的指针 
	
}sqQueue;

//初始化
void initQueue(sqQueue &q)
{
	q.rear=q.front=0;
} 
//判空
bool isEmpty(sqQueue q)
{
	if(q.rear==q.front){
		//TODO
		return true;
	}else{
		return false;
	}
} 
//判满
bool fullQueue(sqQueue &q)
{
	if((q.rear+1)%MaxSize==q.front){
		//TODO
		return true;
	}else{
		return false;
	}
}
//入队
bool enQueue(sqQueue &q,ElemType e)
{
	if((q.rear+1)%MaxSize==q.front){
		
		//TODO
		return false;
	}
	q.data[q.rear]=e;
	q.rear=(q.rear+1)%MaxSize;
	return true; 
} 
//出队
bool deQueue(sqQueue &q,ElemType e)
{
	if(q.rear==q.front){
		//TODO
		return false;
	}
	e=q.data[q.front];
	q.front=(q.front+1)%MaxSize;
	return true;
	
} 

3.定义链式存储的队列(单链表实现) 


4.基于上述定义,实现“出队、入队、判空、判满”四个基本操作  

 链式队列不存在队列已满的情况。在内存足够大的情况下,每次动态申请链表结点内存都会成功,即不会出现队列已满的情况,除非数据量超大内存不够。

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct LinkNode{
	ElemType data;
	struct LinkNode *next;
}LinkNode;

typedef struct{//链式队列 
	LinkNode *front,*rear;//队列的队头和队尾指针 
}LinkQueue;

//初始化
void initQueue(LinkQueue &q)//初始化带头结点的链队列 
{
	q.front=q.rear=(LinkNode*)malloc(sizeof(LinkNode));//建立头结点
	q.front->next=NULL;	//初始化为空 
	
} 
//判空
bool isEmpty(LinkQueue q)
{
	if(q.front==q.rear){
		//TODO
		return true;
	}else{
		return false;
	}
} 
//入队
void enQueue(LinkQueue &q,ElemType e)
{
	LinkNode *s=(LinkNode*)malloc(sizeof (LinkNode));//创建新结点
	s->data=e;
	s->next=NULL;
	q.rear->next=s;//插入链尾
	q.rear=s;//修改尾指针 
} 
//出队
bool deQueue(LinkQueue &q ,ElemType e)
{
	if(q.front==q.rear){
		//TODO
		return false;//空队
		 
	}
	LinkNode *p=q.front->next;
	e=p->data;
	q.front->next=p->next;
	if(q.rear==p){
		//TODO
		q.rear=q.front;
	}
	free(p);
	return true;
} 

标签:return,定义,队列,ElemType,front,基本操作,LinkNode,rear
From: https://blog.csdn.net/snowy_and_sunny/article/details/142252553

相关文章

  • Qt自定义插件plugin的开发和调用
    1.需求描述设备管理组件保存了设备信息和通道信息到sqlite数据库,其他组件也想要访问这个数据库中的内容;需要开发一个自定义插件,用于提供接口给其他组件访问数据库; 开发环境vs2015+Qt5.9.62.插件介绍插件主要面向接口编程,通过接口实现功能的扩展,而不需要访问.lib文件。插件在......
  • PbootCMS留言自定义表单怎么调用
    在PBootCMS中,你可以通过自定义表单和标签来实现留言功能。以下是详细的步骤和示例代码,帮助你在全站任意地方使用留言表单和留言记录列表。1.留言提交表单示例代码<formaction="{pboot:msgaction}"method="post">联系人:<inputtype="text"name="contacts"require......
  • 减少 try...catch,定义全局统一异常处理器!【送源码】
    前言软件开发springboot项目过程中,不可避免的需要处理各种异常,springmvc架构中各层会出现大量的try{...}catch{...}finally{...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。推荐理由代码......
  • Python如何定义一个函数?
    在Python中,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块,它可以提高应用的模块性,和代码的重复利用率。那么Python如何定义一个函数?以下是具体内容介绍。在Python中定义函数有多种方法。最常见的方法是使用def关键字,后跟函数名称和一对圆括号。语法:......
  • C++中定义一个空结构体的内存占用
    比如定义:structTest{};使用sizeof(Test)可以查看到内存占用并不是0,而是1字节。原因主要有两点:一是用于对象标识:在C++中,每个对象都需要有一个唯一的地址。如果空类或结构体的大小为0字节,那么创建两个这样的对象时,它们在内存中的地址将是相同的,这与C++的对象模型相冲突。为......
  • 自定义穿梭框封装
      后面有时间再来慢慢搞吧,暂且先这样,有需要的可以把代码考过去继续弄<template><divid="app"><divclass="f-transferflex"><!--left--><divclass="f-left"><divclass="f-topflexflex-jus......
  • 自定义WPF滑块样式-Slider
    在Windows应用程序开发中,滑块(Slider)是一个非常常见且有用的控件。它可以让用户通过拖动滑块来选择一个范围内的值。然而,WPF或UWP应用程序中的默认滑块样式可能并不总是符合我们的设计需求。因此,我们需要自定义滑块的样式。在本文中,我将向你展示如何使用XAML(ExtensibleApplicat......
  • 椭圆三个定义(待更新)
    椭圆的第二定义平面内到定点\(F(c,0)\)的距离和到定直线\(\displaystylel:x=\frac{a^{2}}{c}\)(点\(F\)不在\(l\)上)的距离之比为常数\(\displaystyle\frac{c}{a}\)(即离心率\(e\),\(0<e<1\))的点的轨迹是椭圆。(即点\(P\)轨迹)其中定点\(F\)为椭圆的焦点,定直线\(l\)称为椭圆的......
  • java方法:定义与调用
    java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:一个方法头和一个方法体下面是一个方法的所以部分:修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。返回值类型:方法可能会返回值。returnValueType是......
  • 文本溢出时,悬浮显示,使用自定义指令
    单行溢出代码overflow:hidden;text-overflow:ellipsis;white-space:nowrap;多行溢出代码overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;word-break:break-all;-webkit-box-o......