C语言算法积累加tag的循环队列

题目:

若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。

试编写与此结构相应的入队和出队算法。

关键字:

循环队列+tag的使用

思路 :

循环队列:

需要变量:队头指针front,队尾指针rear,增减元素的开关:tag

1)入队算法

尾插法:Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%Maxsize;Q.tag=1

队空条件:Q.front== Q.rear且Q.tag==0

2)出队算法

头结点删除:x=Q.data[Q.front];Q.front=(Q.front +1)%Maxsize;Q.tag=0

队满条件:Q.front == Q.rear且Q.tag=1

注意:当删除之后链表为空时,还需增加一步,将尾指针指向头结点

1.设“tag”法的循环队列入队算法:

int EnQueue1(SqQueue &Q, ElemType x){
   if(Q.front==Q.rear&&Q.tag==1)
return 0;
   Q.data[Q.rear]=x;
   Q.rear=(Q.rear+1)%MaxSize;
   Q.tag=1;
   return 1;
}

2.设“tag”法的循环队列入队算法:

int DeQueue1(SqQueue &Q, ElemType &x){
    if (Q.front==Q.rear&&Q.tag==0)
        return 0;
    x=Q.data[Q.front];
    Q.front=(Q.front+1)%MaxSize;
    Q.tag=0;
    return 1;
  }

以上就是C语言算法积累加tag的循环队列的详细内容,更多关于C语言算法tag循环队列的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言实现顺序循环队列实例

    目录 一.队列和循环队列基本概念 二.代码实操 总结 一.队列和循环队列基本概念 队列: 和栈相反,队列是一种先进先出(FIFO)的线性表.只允许在一端插入,在另一端删除. 允许插入的叫"队尾"(rear),允许删除的叫"队头"(front). 入队操作:L->rear++;   L->data[L->rear]=x;(需要入队的元素) 出队操作:L->front++;  x=L->data[L->front]; 求队长:队长=(

  • C语言实现循环队列基本操作

    循环队列依靠取模运算,实现队列中数据元素的逻辑成环操作.其相比队列的顺序存储实现,可以避免"假溢出"的问题. 头文件声明 #include <stdio.h> #include <stdlib.h> /* * 循环队列实现 */ //数据元素上限 #define MaxSize 50 //定义数据类型 typedef int ElemType; /*结构体定义*/ typedef struct SqQueue { ElemType data[MaxSize];/

  • C语言数据结构算法基础之循环队列示例

    目录 说明 示例代码 1. 首先定义结构体: 2. 定义各种算法: 3. 测试: 4. 最后的结果: 说明 循环队列是一种先进先出的,首尾相连的队列. 大致的结构如下图: 用数组来抽象的表示一下的话,如下图: 循环队列有两个指针指向数据,上图中的start和end就是那两个指针,它们指向相同的位置,表示的是空,即队列是空的. 随着数据的放入,队列一般有下面的两种形式: 需要注意第二种形式,从图上看end在start的前面了,但是因为循环关系,前后并不重要. 另外需要考虑的是队列满的情况: 但这种

  • C语言循环队列与用队列实现栈问题解析

    目录 “莫听穿林打叶声,何妨吟啸且徐行” 这里是目录 循环队列题目描述题目链接思路分析代码实现 用队列实现栈题目描述题目链接思路分析代码实现 循环队列 循环队列: 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环循环队列的好处:可以重新利用队列的空间.我们可以利用这个队列之前用过的空间.在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间.但是使用循环队列,我们能使用这些空间去存储新的值. 题目描述 设计你

  • C语言详解链式队列与循环队列的实现

    目录 队列的实现 链式队列 链式队列的定义 链式队列的实现 循环队列 循环队列的定义 循环队列的实现 队列的实现 队列是一种先进先出(First in First Out)的线性表,简称FIFO.与栈不同,栈是一种后进先出(先进后出)的线性表.在队列中,允许插入的一端称为队尾,允许删除的一端称为队头.假设队列是q=(a1,a2,…,an),那么a1就是队头元素,而an是队尾元素.这样我们就可以删除时,总是从a1开始,而插入时,列在最后.这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后

  • C语言实现循环队列

    本文实例为大家分享了C语言实现循环队列的具体代码,供大家参考,具体内容如下 注意事项: 1.循环队列,是队列的顺序表示和实现.因为是尾进头出,所以和顺序栈不同的是需要将顺序队列臆造成一个环状的空间,以便在尾部添加满之后从头部空位开始插入. 2.也可以使用数组队列,也就是不能动态增长的顺序队列,这样不需要每次取模最大值来构成环形空间.每次插入新的队列尾元素时,尾指针增1,每当删除队列头元素时,头指针增1. 3.尾指针会出现在头指针之前,由此特性,循环队列在无法预估使用大小时,不宜使用. 4.在每一

  • C语言算法积累加tag的循环队列

    题目: 若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”. 试编写与此结构相应的入队和出队算法. 关键字: 循环队列+tag的使用 思路 : 循环队列: 需要变量:队头指针front,队尾指针rear,增减元素的开关:tag 1)入队算法 尾插法:Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%Maxsize;Q.tag=1 队空条件:Q.front== Q.re

  • C语言算法练习之打鱼还是晒网

    1. 问题描述 中国有句俗语叫 " 三天打鱼两天晒网 ".某人从 1990 年 1 月 1 日起开始 "三天打鱼两天晒网",问这个人在以后的某一天中是 "打鱼" 还是 "晒网". 2. 题目分析 根据题意可以将解题过程分为 3 步: (1) 计算从 1990 年 1 月 1 日开始至指定日期共有多少天. (2) 由于 "打鱼" 和 "晒网" 的周期为 5 天,所以将计算出的天数用 5 去

  • 详解数据结构C语言实现之循环队列

    本文讲的是循环队列,首先我们必须明白下面几个问题 循环队列的基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置: (3)当队列为空时,front与rear的值相等,但不一定为零: 3.循环队列入队的伪算法 (1)把值存在rear所在的位置: (2)rear=(rear+1)%maxsize

  • C语言算法练习之佩奇借书

    目录 1. 问题描述 2. 题目分析 3. 算法设计 4. 代码实现 5. 算法升级 1. 问题描述 佩奇有5本新书,要借给A.B.C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法? 2. 题目分析 本题属于数学当中常见的排列组合问题,即求从 5 个数中取 3 个不同数的排列组合的总数. 我们可以将 5 本书进行 1-5 的编号,A.B.C 3个人每次都可以从 5 本书中任选 1 本,即每人都有 5 种选择,由于 1 本书不可能同时借给一个以上的人,因此只要这 3 个人所选书的编号

  • C语言算法练习之抓交通肇事犯

    1. 问题描述 一辆卡车违反交通规则,撞人后逃跑.现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征. 甲说:牌照的前两位数字是相同的: 乙说:牌照的后两位数字是相同的,但与前两位不同: 丙是数学家,他说:四位的车号刚好是一个整数的平方. 请根据以上线索求出车号. 2. 题目分析 按照题目的要求造出一个前两位数相同.后两位数相同且相互间又不同的 4 位整数,然后判断该整数是否是另一个整数的平方. 即求一个四位数 a 1.a 2 .a 3. a 4,满足如下的条件: 3. 算法设计 该题

  • C语言算法练习之佩奇存钱方案

    目录 1. 问题描述 2. 问题分析 3. 算法设计 4. 代码实现 1. 问题描述 假设银行一年整存零取的月息为 0.63%. 现在佩奇手中有一笔钱,她打算在今后的 5 年中的每年年底取出 1000 元,到第 5 年时刚好取完. 请算出佩奇存钱时应存入多少? 2. 问题分析 根据题意,可以从第 5 年向前推算. 已知 “在今后的 5 年中,每年的年底取出 1000 元,这样到第 5 年的时候刚好可以取完”,因此,第 5 年年底会取出 1000 元,则可以计算出第 5 年年初在银行中所存的钱数为

  • C语言算法打卡回文串验证算法题解

    目录 概念 Leetcode例题: 1.回文串的验证 2.有效回文 3.回文排列 点杀回文排列 点杀回文验证(有效性) 对撞指针 概念 所谓回文串,就是字符串反转以后和原串相同,如 abba 和 lippil.对于回文串还是比较容易去验证的,从字符数组的两端开始向中间靠拢去验证字符是否相等,但这里是否需要考虑字符数组长度的奇偶性呢?其实是不用的,下面一起来看看: Leetcode例题: 1.回文串的验证 2.有效回文 3.回文排列 (1,2题是一样的,合并讲解吧) 点杀回文排列 先讲回文排列吧,

  • C语言算法练习之折半查找的实现

    目录 1. 题目描述 2. 问题分析 3. 算法设计 4. 动图演示 5. 代码实现 6.知识点补充 continue 语句 break 语句 continue语句 和 break语句的区别 7. 问题拓展 1. 题目描述 N 个有序整数数列已放在一维数组中,利用二分查找法查找整数 m 在数组中的位置. 若找到,则输出其下标值:反之,则输出 “ Not be found!”. 2. 问题分析 二分查找法(也叫折半查找)其本质是分治算法的一种. 所谓分治算法是指的分而治之,即将较大规模的问题分解成

  • C语言算法练习之数组元素排序

    目录 一.问题描述 二.算法实例编译环境 三.算法实例实现过程 3.1.包含头文件 3.2.定义宏和声明数组 3.3.声明相关变量 3.4.随机生成十个数字赋值给数组 3.5.输出随机生成的十个数字 3.6.数组从小到大进行排序 3.7.输出数组元素排序好的数字 四.经典算法实例程序 完整代码 4.1.main.h文件 4.2.main.c文件 五.总结 一.问题描述 求数组的排序 问题的描述 如下几点所示 使用rand()库函数随机生成10个1-100之间的数字. 声明数组的大小为10. 随机

随机推荐