概述
队列 是只允许在一段进行插入操作,而在另一端进行删除操作的线性表 。
队列是一种先进先出的线性表格 允许插入的一段是 队尾, 允许删除的一段是队头。如图:
然后,我们用(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 的时候 , 什么封装继承多态接口 异常处理 啊,我以为 学会了就可以开发软件什么的,没想到 学完了 我还是个 菜鸟 呜呜呜(但叫法实在是高大上呢)不扯了 - - 还是得好好 学习 啊
最后
以上就是爱笑含羞草为你收集整理的循环队列与数组的全部内容,希望文章能够帮你解决循环队列与数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复