循环列队的循序结构

</pre><pre name="code" class="cpp">//1.队列顺序结构的定义

#define MAXQSIZE 100
typedef struct
{
	QElemType base[MAXQSIZE];//静态数组
	int front;//队列头指针
	int rear;//队列尾指针
}SqQueue;

//解决队列的假溢出方法
//1.将循序列队臆造为一个环状空间。尾指针指向头指针
//2.在对满的情况下,rear指针和front指针会指向同一个节点元素。
//这时候就相当于对空,因为队列为空的情况下,rear和front指针指向同一元素

//循环队列怎么区分对空和对满呢???
//解决办法;

//1.因出对而相等,则为空。因入队而相等,则为满
//2.少用一个元素的空间,约定rear+1=front时,就认为对满

//2.循环队列,队列顺序存储结构的虚拟实现

#define MAXQSIZE 100//最大列队长度
typedef struct
{
	QElemType *base;//初始化的动态分配存储空间
	int front;//头指针,若对不空,指向队列头元素
	int rear;//尾指针,若队列不空,指向队尾元素的下一位置
}SqQueue;

//3.基本操作

Status InitQueue(SqQueue &Q)
{
	//构造一个空队列Q
	Q.base=(QElemType*)malloc(//开辟队列的内存空间
		MAXQSIZE*sizeof(QElemType));
	if(!Q.base)//如果队尾不存在,那么开辟空间失败
		exit(OVERFLOW);
	Q.front=Q.rear=0;//空队列
	return OK;
}

//4.求队列长度

int QueueLength (SqQueue Q)
{//返回Q的元素个数,即队列的长度
	return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
	//由于rear也可能小于front,所以这个方法比较实用,相当于求
	//rear-front的绝对值。
}

//5.插入元素E为Qde 新队尾元素

Status EnQueue(SqQueue &Q,QElemType e)
{
	if((Q.rear+1)%MAXQSIZE==Q.front)//判断是否为对满
		return ERROR;
	Q.base[Q.rear]=e;//让新插入的元素为队尾元素
	Q.rear=(Q.rear+1)%MAXQSIZE;//移动到下一位,如果对满,那么取余到达第一元素位置
	return OK;
}

//6.入队和出队
//入队:rear=rear+1;入队队尾元素加一a4->a5->a6;一次增加
//出队:front=front+1  出队时队首元素加一a4->a3->a2->a1,从右到左出队

//7.若队不空,则删除队头元素,用e返回其值,否则,返回ERROR

Status DeQueue(SqQueue &Q,QElemType &e)
{
	if(Q.front==Q.rear)//如果队列为空,返回ERROR
		return ERROR;
		e=Q.base[Q.front];//把队首指针赋给e
	Q.front=(Q.front+1)%MAXQSIZE;//将队首指针向上移动一个位置
	//如果队满,则循环到第一个位置
	return OK;
}

时间: 2024-12-29 23:16:28

循环列队的循序结构的相关文章

例题:打印乘法口诀。可能大家一看有点难,但只要理解for 循环嵌套,两层循环,外层循环行数,里层循环列数,搞清楚行数和列数之间的关系,就可以轻松做出这道题

namespace 打印乘法口诀{    class Program    {        static void Main(string[] args)        {            for (int i = 1; i <=9; i++)//行数循环九次,            {                for (int j = 1; j<=i; j++)//当i等于1的时候,j等于1,                {                    Consol

for循环的执行循序

先上一段代码,大家说出此方法的执行结果: public class Print{ static boolean out(char c){ System.out.println(c); return true; } public static void main(String[] argv){ int i = 0; for(out('A');out('B') && (i<2);out('C')){ i++; out('D'); } } } 答案不说了,直接说解题思路吧 for循环的执行

第6章 流程控制

一.顺序结构(程序正常执行流程从上往下,从左往右)(不用研究) 赋值运算时为从右往左执行,且左侧为属性或变量,不取值!!! 二.选择结构   a) If语句 b) Switch语句 三.循环结构   a) for循环 b) while循环 c) do...while循环 6.1 循序结构 程序正常执行顺序不必过多研究 6.2 选择结构 共有两种,if语句和switch语句.If常用,switch为特殊情况使用, 判断条件出现的情况特别多的时候用switch,其他时候if语句比较方便. 6.2.1

ios开发环境 分支语句 、 循环结构(for) 、 循环结构

1 完成命令解析程序 1.1 问题 有命令解析程序,该程序提供三个功能选项供用户选择,用户选择某功能后,程序在界面上输出用户所选择的功能名称.程序的交互效果如图-1所示: 图-1 由上图可以看出,程序提供的功能有:显示全部记录.查询登录记录和退出.如果用户在控制台输入1,则表示用户选择的功能为“显示全部记录”,此时,需要在界面上输出该功能的名称. 如果用户在控制台输入2,则表示用户选择的功能为“查询登录记录”,此时,也需要在界面上输入该功能的名称,交互效果如图-2所示: 图-2 如果用户在控制台

1.5 Python基础知识 - while循环

在我们生活中有很多反复要做的事情,或者动作,我们称之为循环.在开发程序中也会有循环的事情要去做,就是需要反复的去执行某个代码,或者反复进行某种演算,直到达到某种条件的时候才会停止.在Python中我们使用的是while循环. 伪代码: 当 条件成立: 执行循环体 直到条件不成立 代码格式: while ...: ... 示例代码: n = 0 while n < 10: n = n + 1 # 或者 n += 1 print(n) # 执行结果 12345678910 在示例代码中,我们将n赋值

循环嵌套,while循环,穷举迭代循环

一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while循环 1,格式 (1) 初始条件: while(循环条件) { 循环体: 状态改变: } 当循环体不满足循环条件时,才能跳出所处的for循环. (2) 初始条件: do { 循环体: 状态改变: } while(循环条件) 其表示才开始不管满不满足循环条件,限制性一次,如果不符合循环条件,就跳出循环

C++第4次实验(基础班)—循环结构程序设计

此次上机中的4个题目项目6.项目7(选1)必做.其他2两题可从剩下的项目中选,也可从项目7中选. [项目1:利用循环求和]求1000以内全部偶数的和(答案:250500) 要求:请编出3个程序来,分别用三种循环语句完毕,注意体会各种循环语句的运行过程及语法特点. [项目2-分数的累加]编程序,输出1/3-3/5+5/7-7/9-+19/21的结果(答案:-0.383842) 提示:假设直接解决上面的问题有困难,能够设计一条"由易到难"的路线,逐渐解决当中要解决的问题.让自己的思路明朗起

第九章 二重循环

一.回顾3种循环结构 1.while l  语法 条件表达式的初始值: while(条件表达式){ 循环操作: 更改条件表达式的语句: } l  特点:先判断,再执行,有可能一次循环都没有 l  适用的场合:循环次数未知 l  表现形式 n  第一种:循环的次数确定 u  条件表达式,判断整型的变量在某个范围 u  while(i<=5){ //不需要接收用户输入} n  第二种:循环次数不限,用户输入某个值结束循环 u  条件表达式,根据用户输入的值进行判断 u  while(用户输入的值和某

C语言循环结构-while/do...while/for--逢3过,阶乘,九九乘法表

C语言中的循环主要有三种: while循环,do-while循环和for循环 while循环:先判断条件是否成立,如果条件成立将执行其下的循环体,如果条件不成立一次都不执行. 语法: while(条件) { //循环体; } 示例1:打印100遍"我是最棒的!" int i=1; while(i<=100){ printf("第%d遍:我是最棒的!\n",i); i++; } 示例1:打印100遍"我是最棒的!" int i=1; whil