C++ 顺序循环队列和链队列的基本操作_实验循环和链队列应用-程序员宅基地

技术标签: c++  编程语言  队列  数据结构  

实验5、链队列的基本操作
实验要求:
(1)实验目的
通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。
(2)实验内容
用链式存储结构,实现教材定义的队列的基本操作。
(3)参考界面
菜单中包括以下功能:
1.初始化队列,2.销毁队列,3.清空队列,4. 队列判空,5.求队列长度,6.获取队头元素,7.插入一个 元素,8.删除一个元素,9输出所有元素。
要求:自定义的函数中不允许出现提示语和输出语句。
(4)验收/测试用例
通过菜单调用各个操作,测试点:
 没有初始化前进行其他操作,程序是否能控制住;
 初始化一个队列;
 判队列空,屏幕显示队列为空;
 3个数入队, 3、5、7;
 队头长度,屏幕输出3;
 取队头元素,再判队列是否空,然后再判队列长度,(让学生知道取队头元素不改变队列中的内容,队头指针不发生改变);
 出队,再判队列长度和显示队列中剩余的元素;(多次出队,队列为空之后再执行出队操作,是否提示队列为空);
 入队一个元素2,再出队,再判断队列是否为空,(主要测试出队操作中特殊情况下的那两行代码是否写了);
 销毁队,再做其他操作,判断程序是否能控制。


*交互性做的并不是很完善,但是基本的菜单功能均可实现,一些代表性操作参照严蔚敏数据结构一书,以下仅供参考=====*


一、链队列

#include<iostream>
#include<stdlib.h>
using namespace std;
#define OVERFLOW -1
int exist=0;     //判断初始化
typedef int QElemType;
//定义队列结构体 
typedef struct QNode{
   
    
	QElemType data;
	struct QNode *next;
}QNode, *QueuePtr;
//定义队头队尾指针
typedef struct{
   
    
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

//构造空队列
void InitQueue(LinkQueue &Q){
   
    
	Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
	if(!Q.front)  exit(OVERFLOW);
	Q.front->next=NULL; 
} 

//销毁队列
void DestroyQueue(LinkQueue &Q){
   
    
	while(Q.front){
   
    
		Q.rear=Q.front->next;
		free(Q.front);
		Q.front=Q.rear;
	}
} 

//清空队列
void ClearQueue(LinkQueue &Q){
   
    
	QueuePtr p,q;
	Q.rear=Q.front;
	p=Q.front->next;
	Q.front->next=NULL;
	while(p){
   
    
		q=p;
		p=p->next;
		free(q);
	}
}

//队列判空
void QueueEmpty(LinkQueue &Q){
   
    
	if(Q.front==Q.rear) cout<<"队列为空!"<<endl;
	else cout<<"队列不空!"<<endl;
} 

//求队列长度
int QueueLength(LinkQueue &Q){
   
    
	QueuePtr p;
	int i;
	for(i=0,p=Q.front->next;p;p=p->next,++i);
	return i;
}

//获取队头元素
int GetHead(LinkQueue &Q){
   
    
	int e;
	if(Q.front==Q.rear){
   
    
		cout<<"队列为空!"<<endl;
		exit(0);
	}
	else e=Q.front->next->data;
	return e;
} 

//插入一个元素
void EnQueue(LinkQueue &Q,int e){
   
    
	QueuePtr p=
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ninini12386/article/details/109521143

智能推荐

我的DBHelper类-程序员宅基地

文章浏览阅读41次。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;namespace DAL{ public class DBHelper ..._完整的dbhelper类

【Android学习专题】安卓样式学习(学习内容记录)_android权威编程指南第三版笔记-程序员宅基地

文章浏览阅读490次。格式:按钮组件不支持着色,所以colorAccent主题色在项目中没有效果。_android权威编程指南第三版笔记

Windows10&windows server 2012r2作为slave 用jenkins部署微信小程序自动化打包_win2012如何配置小程序?-程序员宅基地

文章浏览阅读945次。背景微信小程序的测试发布在没有 CI/CD 等相关工具的情况下,存在着如下的问题:小程序开发助手中,同一个开发者只能显示一个开发版本测试同事、产品经理、UI设计师找开发要二维码,或者本地拉取代码后使用开发者工具打开,不方便且效率较低本地生成的二维码会出现携带本地代码、未及时拉取分支其他改动等问题为了避免如上问题的发生,采用微信小程序集成 Jenkins 的方案。想达到一个效果,开发人员只管往前写代码,提交代码,修改bug。而测试人员就通过jenkins自动打包和部署进行测试开发人员所做的功能和回归_win2012如何配置小程序?

GCC 分别64位和32为体系_gcc查看64 32位-程序员宅基地

文章浏览阅读1k次。#if defined(__X86_64__) || defined(__X86_64) || defined(__amd_64) || defined(__amd_64__)_gcc查看64 32位

剑指offer-js 二进制中1的个数-程序员宅基地

文章浏览阅读268次。二进制中1的个数题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。问题分析:将数字转换成二进制数字,如果是直接求的话,注意数组反转,反转之后,若不够32位进行补零负数的补码: 求出绝对值的原码,从最后一个数字开始往前数,到第一个1之后把前面的全部取反代码展示:function NumberOf1(n){ //还可以使用二进制转换来减少代码量 num.toString(2) var nums = []; var num = 0; _js 二进制中1的个数

Drawable资源_drawable 资源-程序员宅基地

文章浏览阅读468次。Drawable资源是对图像的一个抽象,你可以通过getDrawable(int)得到并绘制到屏幕上。这里有几种不同类型的Drawable: Bitmap File 一个Bitmap图像文件(.png、.jpg或.gif)。BitmapDrawable。 Nine-Patch File 一个带有伸缩区域的PNG文件,可以基于content伸缩图片(.9.png)_drawable 资源

随便推点

socket.io 中namespace 和 room的概念。_socketio 房间概念-程序员宅基地

文章浏览阅读2.2w次,点赞9次,收藏13次。基本概念看socketio官方文档 http://socket.io/docs/rooms-and-namespaces/namespace 和room的概念其实用来同一个服务端socket多路复用的。namespace,room和socketio的关系如下。socket会属于某一个room,如果没有指定,那么会有一个default的room。这个room又会属于某个namespace,_socketio 房间概念

编辑 Ext 表格(一)——— 动态添加删除行列_extjs 表格删除一列-程序员宅基地

文章浏览阅读6.5k次。一、动态增删行在 ext 表格中,动态添加行主要和表格绑定的 store 有关,通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除。 (1) 动态添加表格的行 gridStore.add({}); (2) 动态删除表格的行 gridStore.removeAt(gridStore.count() - 1); 二、动态增删列在 ext_extjs 表格删除一列

1.1 仿射集与凸集-1_仿射集为相对开集-程序员宅基地

文章浏览阅读211次。2021 年 2 月 5 日星期五,想喝奶茶的一天。想要 coco 今日推出的奶茶包,可惜要 88 赞。废话少说,进入正题。1 凸集与凸函数1.1 仿射集与凸集-1定义 1.1.1 若集合 W⊆RnW\subseteq\mathbb{R}^nW⊆Rn 中任意两个不同元素对于加法和数乘皆是封闭的,即任取 x1,x2∈Wx_1,x_2\in Wx1​,x2​∈W,λ1,λ2∈R\lambda_1,\lambda_2\in\mathbb{R}λ1​,λ2​∈R 皆有λ1x1+λ2x2∈W,\lambd_仿射集为相对开集

mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla-程序员宅基地

文章浏览阅读328次。前提:分析mysql性能的时候会查看数据库的哪些sql语句有问题,效率低。这就用到了数据库的慢查询,作用就是: 它能记录下所有执行超过long_query_time时间的SQL语句,帮你找到执行慢的SQL,方便我们对这些SQL进行优化。1.配置慢查询在mysql客户端执行mysql> show variables like "%query%" ;得到结果:设置慢查询.png涉及参数解释:sl..._mysqldumpslow /var/lib/mysql/slow.log

黑苹果记录-程序员宅基地

文章浏览阅读3.6k次。--2018-4-26 更新一般情况下,小版本的更新直接使用app store 进行更新就行。主要是参照tonymacx86 。这里记一下一些相关问题。如果NVIDIA 官方 驱动没有更新,可以用下面的脚本进行打补丁bash &lt;(curl -s https://raw.githubusercontent.com/Benjamin-Dobell/nvidia-update/master/nvi...

Nginx 又一牛 X 功能:流量拷贝_nginx x-origin-uri-程序员宅基地

文章浏览阅读844次。1. 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如:可以验证功能是否正常,以及服务的性能;用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问;这跟灰度发布还不太一样,镜像流量不会影响真实流量;可以用来排查线上问题;重构,假如服务做了重构,这也是一种测试方式;为了实现流量拷贝,Nginx提供了ngx_http_mirror_modu..._nginx x-origin-uri