`
gstarwd
  • 浏览: 1536507 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

循环队列(C语言版)

阅读更多

循环队列(C语言版)
   作者:刘勉刚 E-mail:liumgj@163.com
  线性结构的主要操作就是插入和删除,我 们前面讲过的顺序线性表、单链表、双链表都没有限制插入和删除操作的位置。如果我们限定插入和删除操作在线性表的同一端进行那么这种结构就是栈;如果限定 插入在一端而删除在另一端,这种结构就是对列;栈的特点是先进后出(FILO)而对列是先进先出(FIFO)。进行插入的一端叫队尾,删除的一端叫队头。
    队列的实现可以用顺序线性表也可以用链表。在实际使用中有一种更常用的队列叫循环队列。循环队列是把队列的头和尾在逻辑上连接起来,构成一个环。循环队列 中首尾相连,分不清头和尾,此时需要两个指示器分别指向头部和尾部。插入就在尾部指示器的指示位置处插入,删除就在头部指示器的指示位置删除。
    循环队列在插入时也要判断其是否已满,删除时要判断其是否已空。为空的条件比较简单当头部指示器和尾部指示器指向同一个位置时表示循环队列为空;因为尾部 指示器指示的是最后一个元素的下一个位置,所以循环队列已满时头部指示器和尾部指示器也指向同一个位置,为了区分这两种状况有两种方法,一种增加一个标识 变量来区分,另一种损失循环队列中的一个元素,即头和尾之间的位置不用,此时循环队列为满的条件变成头部指示器加1等于尾部指示器;为空的条件成为头部指 示器和尾部指示器指向同一位置。
   循环队列的首尾相连是通过取余操作来实现的,把头和尾的位置都除以队列最大长度然后取余。当到达尾部及最后一个位置时再加1就成了队列的长度刚好可以整除余0即又回到了队头。
   循环队列的主要操作:
   (1)创建循环队列
   (2)初始化循环队列
   (3)判断循环队列是否为空
   (4)判断循环队列是否为满
   (5)入队
   (6)出队
  Microsoft Visual Studio .NET 2003下的程序:

      #include<stdio.h>
 
  #define MAXSIZE 100
  typedef struct
  {
  int elem[MAXSIZE];
  int front,rear;
  }Quque; //定义队头
  
  int initQue(Quque **q) //初始化
  {
  (*q)->front=0;
  (*q)->rear=0;
  }
  
  int isFull(Quque *q)
  {
  if(q->front==(q->rear+1)%MAXSIZE) //判满 刘勉刚
  return 1;
  else
  return 0;
  }
  int insertQue(Quque **q,int elem)
  {
  if(isFull(*q)) return -1;
  (*q)->elem[(*q)->rear]=elem;
  (*q)->rear=((*q)->rear+1)%MAXSIZE; //插入
  return 0;
  }
  int isEmpty(Quque *q)
  {
  if(q->front==q->rear) //判空
  return 1;
  else
  return 0;
  }
  int deleteQue(Quque ** q,int *pelem)
  {
  if(isEmpty(*q))
  return 0;
  *pelem=(*q)->elem[(*q)->front];
  (*q)->front =((*q)->front +1)%MAXSIZE;
  return 0;
  }
  
  int main(void)
  {
  int i=0,elem;
  Quque *q=(Quque *)malloc(sizeof(Quque));
  initQue(&q);
  for(;i<10;i++)
  {
  insertQue(&q,i);
  }
  for(i=0;i<10;i++)
  {
  deleteQue(&q,&elem);
  printf("%d\n",elem);
  }
  system("pause");
  return 0;
  }
 


  以上是课堂演示代码,整理出来与大家共享,作者:刘勉刚。

分享到:
评论

相关推荐

    数据结构 严蔚敏 C语言版 循环队列

    数据结构是计算机科学中的核心课程之一,它研究如何在计算机中高效地组织和管理数据,...严蔚敏教授的《数据结构》C语言版对循环队列的阐述深入且实用,无论对于初学者还是有经验的开发者,都是一份宝贵的参考资料。

    C语言_循环队列

    包含了C语言实现循环队列的代码, 有循环队列的彩图讲解, 便于理解代码.

    约瑟夫环(循环队列)c语言版

    自己写的过了验收的 类C的数据结构 用了循环队列 主要是移动队列头指针

    C语言循环队列

    C语言实现循环对列,思路清晰。编译环境VC 2008下可编译通过。

    循环队列c程序

    在C语言中实现循环队列,我们需要考虑以下几个关键知识点: 1. **数据存储结构**:通常,循环队列使用数组作为底层数据结构。数组的最后一个元素之后就是数组的第一个元素,形成一个循环。 2. **队头和队尾指针**...

    数据结构C语言版_循环队列

    ### 数据结构C语言版_循环队列 #### 知识点概述 本篇文章将围绕“循环队列”这一数据结构进行详细的介绍与分析。在计算机科学领域,队列是一种非常重要的线性数据结构,它遵循先进先出(FIFO)的原则。而循环队列...

    C语言实现队列源码,包含顺序队列,链式队列,循环队列,亲测可用

    本文将详细讨论在C语言中实现的几种队列类型,包括顺序队列、链式队列以及循环队列,并结合提供的源代码进行解析。 顺序队列是基于数组实现的数据结构,它的特点是操作主要集中在数组的两端:一端称为队头,用于出...

    一个串口循环队列,可以制作协议收发,非常好用

    结合上述知识点,这个“标准版串口循环队列”项目很可能是实现了一个高效的数据收发解决方案,它利用循环队列来存储485通信接收到的数据,并且可能包含了自定义的协议解析功能,以处理这些数据。在实际应用中,这样...

    C语言实现循环队列

    C语言实现循环队列

    简单的C语言循环队列

    总结来说,"简单的C语言循环队列"是一个基础的数据结构实验,它帮助我们理解如何在C语言环境中实现和操作循环队列,同时也为我们提供了在实际编程中处理数据流和队列操作的基础。通过这个实验,可以提升对数据结构和...

    C语言 循环队列_数组(.c文件 代码有详解 易懂 功能实现较全 )

    代码有详解 易懂 功能实现较全 代码有详解 易懂 功能实现较全 代码有详解 易懂 功能实现较全

    c语言 循环队列

    在C语言中实现循环队列,我们需要定义一个数组来存储元素,同时维护两个指针——front(队首)和rear(队尾)。front指向队列中的第一个元素,而rear指向下一个要加入元素的位置。当rear追上front时,队列满了;当...

    (c语言)使用循环队列方式判断括号匹配

    本文将深入探讨如何使用C语言和数据结构中的循环队列来实现括号匹配的算法。 首先,我们需要了解什么是循环队列。循环队列是一种线性数据结构,它利用数组的“首尾相接”特性,模拟一个无限的队列。当队列的末尾被...

    duilie.rar_ duilie_C语言 队列_C语言队列_duilie_循环队列

    总结来说,这个压缩包提供了一个学习C语言实现链队列和循环队列的宝贵资源,对想要提升C语言编程技能,尤其是数据结构和算法理解的开发者来说非常有价值。通过实践这些示例,可以更好地掌握队列这一基本数据结构及其...

    一种简单易用的通用循环队列的C语言解决方案

    博文《一种简单易用的通用循环队列的C语言解决方案》实现的代码。 在实际的嵌入式编程中,消息队列的使用还是比较频繁的,已经在文章《一种简单安全的消息队列的C语言解决方案》中说明了一种队列的解决方案,但是...

    数据结构循环队列的C语言实现

    数据结构循环队列的C语言实现

    串口缓冲区 循环队列

    在Keil for ARM 5.10开发环境中,开发者可以利用C语言编写串口接收中断服务程序,当串口接收到数据时,中断会被触发,此时在中断处理函数中,将接收到的数据插入到循环队列中。同时,需要在主循环或其他合适的地方...

    循环队列(C语言实现)

    设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 # 优点 循环队列的一个好处是我们可以利用这个...

    c语言实现动态增容循环队列

    队列在日常开发中有时还是会用到的,比如实现一个消息队列时底层就需要一个队列、又或者实现图的广度遍历也...c语言标准库是没有队列这种结构提供的,这里提供一个种队列的实现方法,在c语言的环境下能够方便的使用。

Global site tag (gtag.js) - Google Analytics