两种方法实现队满和队空的判断操作(循环队列)

本周的作业要求:

1.给出循环队列的存储结构定义。

2.完成循环队列的基本操作函数。

1)      初始化循环队列;

2)      建立循环队列;

3)      实现入队和出队操作;

4)     采用下面两种方法实现对满和队空的判断操作:

方法一:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元(必做);
   方法二:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);

3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果;

4.程序调试运行并保存输出结果;

5.提交实验作业。

方法一:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元(必做);

  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cstring>
  4 #define MAXSIZE 50
  5 typedef struct
  6 {
  7     char a[MAXSIZE];
  8     int front;
  9     int rear;
 10 }SeqQueue;
 11
 12 int flag=0;
 13
 14 void deng(SeqQueue *Q);
 15
 16 void duiman(SeqQueue *Q)
 17 {
 18     printf("队满,插入失败,返回登录界面\n");
 19     deng(Q);
 20 }
 21
 22 void duikong(SeqQueue *Q)
 23 {
 24     printf("队空,无元素出队,返回登陆界面\n");
 25     flag=0;
 26     deng(Q);
 27 }
 28
 29 void EnterQueue(SeqQueue *Q,char x)
 30 {
 31     if((Q->rear +1)%MAXSIZE==Q->front)
 32         duiman(Q);
 33     Q->a[Q->rear]=x;
 34     Q->rear=(Q->rear+1)%MAXSIZE;
 35     return;
 36 }
 37
 38 void DeleteQueue(SeqQueue *Q)
 39 {
 40     char x;
 41     if(Q->front==Q->rear)
 42         duikong(Q);
 43     x=Q->a[Q->front];
 44     Q->front=(Q->front+1)%MAXSIZE;
 45     if(flag==0){
 46         flag=1;
 47         DeleteQueue(Q);
 48     }else
 49         printf("出队的队头元素为%c\n",x);
 50     deng(Q);
 51 }
 52
 53 void ru(SeqQueue *Q)
 54 {
 55     printf("输入入队元素以$结束\n");
 56     char En[MAXSIZE];
 57     int i;
 58     for(i=0;i<MAXSIZE;i++){
 59         scanf("%c",&En[i]);
 60         if(En[i]!=‘$‘){
 61             EnterQueue(Q,En[i]);
 62         }
 63         else
 64             break;
 65     }
 66     printf("入队成功!\n");
 67     deng(Q);
 68 }
 69
 70 void InitQueue(SeqQueue *Q)
 71 {
 72     Q->front=Q->rear=0;
 73 }
 74
 75 void deng(SeqQueue *Q)
 76 {
 77     printf("1.入队\n");
 78     printf("2.使队头元素出队,并返回它的值\n");
 79     printf("3.退出\n");
 80     int a;
 81     scanf("%d",&a);
 82     switch(a)
 83     {
 84     case 1:
 85         system("CLS");
 86         ru(Q);
 87     case 2:
 88         system("CLS");
 89         DeleteQueue(Q);
 90     case 3:
 91         exit(0);
 92     default:
 93         printf("输入不合法,请重新输入\n");
 94         deng(Q);
 95     }
 96 }
 97
 98
 99 int main()
100 {
101     SeqQueue Q;
102     InitQueue(&Q);
103     deng(&Q);
104
105     return 0;
106 }

方法二:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);

  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cstring>
  4 #define MAXSIZE 50
  5 typedef struct
  6 {
  7     char a[MAXSIZE];
  8     int front;
  9     int rear;
 10 }SeqQueue;
 11
 12 int flag=0,tag=0;
 13
 14
 15 void deng(SeqQueue *Q);
 16
 17 void duiman(SeqQueue *Q)
 18 {
 19     printf("队满,插入失败,返回登录界面\n");
 20     deng(Q);
 21 }
 22
 23 void duikong(SeqQueue *Q)
 24 {
 25     printf("队空,无元素出队,返回登陆界面\n");
 26     flag=0;
 27     deng(Q);
 28 }
 29
 30 void EnterQueue(SeqQueue *Q,char x)
 31 {
 32     if(tag==1&&Q->front==Q->rear)
 33         duiman(Q);
 34     Q->a[Q->rear]=x;
 35     Q->rear=(Q->rear+1)%MAXSIZE;
 36     return;
 37 }
 38
 39 void DeleteQueue(SeqQueue *Q)
 40 {
 41     char x;
 42     if(tag==0&&Q->front==Q->rear)
 43         duikong(Q);
 44     x=Q->a[Q->front];
 45     Q->front=(Q->front+1)%MAXSIZE;
 46     if(flag==0){
 47         flag=1;
 48         DeleteQueue(Q);
 49     }else{
 50         tag=0;
 51         printf("出队的队头元素为%c\n",x);
 52     }
 53     deng(Q);
 54 }
 55
 56 void ru(SeqQueue *Q)
 57 {
 58     printf("输入入队元素以$结束\n");
 59     char En[MAXSIZE];
 60     int i;
 61     for(i=0;i<MAXSIZE;i++){
 62         scanf("%c",&En[i]);
 63         if(En[i]!=‘$‘){
 64             EnterQueue(Q,En[i]);
 65         }
 66         else
 67             break;
 68     }
 69     tag=1;
 70     printf("入队成功!\n");
 71     deng(Q);
 72 }
 73
 74 void InitQueue(SeqQueue *Q)
 75 {
 76     Q->front=Q->rear=0;
 77 }
 78
 79 void deng(SeqQueue *Q)
 80 {
 81     printf("1.入队\n");
 82     printf("2.使队头元素出队,并返回它的值\n");
 83     printf("3.退出\n");
 84     int a;
 85     scanf("%d",&a);
 86     switch(a)
 87     {
 88     case 1:
 89         system("CLS");
 90         ru(Q);
 91     case 2:
 92         system("CLS");
 93         DeleteQueue(Q);
 94     case 3:
 95         exit(0);
 96     default:
 97         printf("输入不合法,请重新输入\n");
 98         deng(Q);
 99     }
100 }
101
102
103 int main()
104 {
105     SeqQueue Q;
106     InitQueue(&Q);
107     deng(&Q);
108
109     return 0;
110 }
时间: 2024-12-22 02:00:54

两种方法实现队满和队空的判断操作(循环队列)的相关文章

清除SQLServer日志的两种方法

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:一种方法:清空日志.1.打开查询分析器,输入命令DUMP TRANSACTION 数据库名 WITH NO_LOG2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了. 另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失.1: 删除

基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS

广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索. BFS的思想: 从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1.V2.--Vn,然后依次访问与V1.V2--Vn相邻且未被访问的顶点.如此继续,找到所要找的顶点或者遍历完整个图.我们采用队列来存储访问过的节点. DFS的思想: 深度优先搜索所遵循的策略就是尽可能"深"的在图中进行搜索,对于图中某一个

一、查看Linux内核版本命令(两种方法):

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码

要想提取车牌号,首先你要定位车牌区域嘛,本文分别两种方法用,即颜色和形态学的方法,对车牌区域进行判定.说得是两种方法,其实两种方法并无多大的区别,只是有一步的判断标准不一样而已,你看了下面整理出的的思路就知道两者的区别真的很小了. 方法一:利用颜色提取车牌区域的思路: ①求得原图像的sobel边缘sobelMat ②在HSV空间内利用车牌颜色阈值对图像进行二值化处理,得到图像bw_blue→ ③由下面的判别标准得到图像bw_blue_edge for (int k = 1; k != heigh

ios图片拉伸两种方法

ios图片拉伸两种方法 UIImage *image = [UIImage imageNamed:@"qq"]; 第一种: // 左端盖宽度 NSInteger leftCapWidth = image.size.width * 0.5f; // 顶端盖高度 NSInteger topCapHeight = image.size.height * 0.5f; // 重新赋值 image = [image stretchableImageWithLeftCapWidth:leftCapW

Android第五期 - 更新自己的apk本地与网络两种方法

首先是本地: ParseXmlService部分: package com.szy.update; import java.io.InputStream; import java.util.HashMap; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

pdf文件怎么修改 修改PDF文件的两种方法

都说PDF格式的文件不能修改,我就呵呵了!不管你们信不信,反正我是不信.因为我会修改PDF文件,并且方法还不止一种.想知道我是怎么修改PDF文件的吗?下面我就告诉大家修改PDF文件的两种方法. 方法一 1.方法一就是将PDF文件转换成一种可容易编辑的文档,如:word.excel.ppt等格式,然后再进行编辑,编辑好后再将其转换成PDF格式,是不是很简单!具体是该如何转换的,下面有详细教程. 2.下载一个PDF转换器,并将它安装在电脑上.工具最好是支持双向转换的那种,如:http://www.x

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主