我是靠谱客的博主 爱笑含羞草,最近开发中收集的这篇文章主要介绍循环队列与数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

队列 是只允许在一段进行插入操作,而在另一端进行删除操作的线性表 。
队列是一种先进先出的线性表格 允许插入的一段是 队尾, 允许删除的一段是队头。如图:在这里插入图片描述
然后,我们用(q.rear - q.front +maxsize )%maxsize 求出 队列当前的长度
如图 在这里插入图片描述在这里插入图片描述
因为这个rear 后索引 是可以 比front 小 ,也可以 比 front 大(因为是循环的 这两个指针都会在 0-4 的闭区间里 转换 ) 所以 呢,如果rear 比 front 小 ,那么长度就是 如果rear 大于 front 的话 ,长度 就是 rear - front 对吧 ? 如果 小于 呢?
那就是 一段是 rear 另外一端是 (maxsize -front ) - - 这很好理解把? 就是前面rear 一段加上后面 front 到 末端的那一段啊 ! 所以 无论 rear 和 front 在哪里 , 都可以 用 通式 (q.rear - q.front +maxsize )%maxsiz求出这个队列的长度
最后 附上代码 与 运行结果
:

#include<stdio.h>
#define  maxsize 7 
typedef char  Qelemtype;

typedef struct 
{
  Qelemtype data[maxsize];//定义一个长为7的数组 -********其中有一个位置不存放数据 !
 int front;
 int rear;

} sqqueue;//取别名为sqqueue;
struct intiqueue(sqqueue *q)
{ q->front=0;//下标为  0开始
  q->rear =0;//下标为  0开始
  return 1;
}
int length(sqqueue q) // 求队列长度的一个数组
{
return  (q.rear - q.front +maxsize )%maxsize; 

}


int   enqueue( sqqueue *q ,  Qelemtype e)
 {
  if (   (q->rear + 1 )%maxsize  ==q->front   )
	 { printf (" 队列已经满了!n");
return 0 ;
  }

q->data[q->rear]=e;
  q->rear=(q->rear +1)%  maxsize ;//正是因为求余,让这个队列  可以 循环 !!!!
  return 1;

 }
 int dequeue(sqqueue *q , Qelemtype *e)
 {
 if (q->front ==q->rear )
 return 0;
 *e=q->data [q->front]; //弹出 此时的数组位置的 data   
 printf("%c     ", *e);

 q->front = (q->front +1)%maxsize ;//然后 front  指向下一个位置   同样 求余使得 队列能够循环 
// dequeue( q ,  e);//这行代码可以递归输出全部队列里面的内容   如果没有的话就输出一个   然后返回 1
return 1;

 }
int main()
{ sqqueue  a;
  intiqueue(&a); //初始化队列

   char y;
  printf("请依次输入数据 n ");
  y=getchar ();

  while ( y!='n')
  {
   enqueue( &a,  y);
  y=getchar ();
 }//进队列
  printf(" 队列的长度是 %d  n",length( a)); //输出长度 

	 
 printf("先输出 前三个 数据 n") ;
dequeue(&a, &y );
 dequeue(&a, &y );
 dequeue(&a, &y );
   printf(" 队列的长度是 %d  n",length( a)); //输出长度 
 printf("再次插入三个数据");

  y=getchar ();  
  while ( y!='n')
  {
   enqueue( &a,  y);
  y=getchar ();
 }//进队列
  while (a.front!=a.rear)
  {
  
  dequeue(&a,&y);

  }


 
    




return 0;
}

运行结果如图:
在这里插入图片描述
本章 结语:
感觉 这像极了一个静态链表( 形式不同 ,这个是按照 数组下标 的 链表是要分配空间 和地址索引的) ,。。- - ?? 感觉 发明这个 的 应该觉得这样叫会 高大上点把… 本人 刚 学习 C++ ,java 的时候 , 什么封装继承多态接口 异常处理 啊,我以为 学会了就可以开发软件什么的,没想到 学完了 我还是个 菜鸟 呜呜呜(但叫法实在是高大上呢)不扯了 - - 还是得好好 学习 啊

最后

以上就是爱笑含羞草为你收集整理的循环队列与数组的全部内容,希望文章能够帮你解决循环队列与数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部