烟台网站建设加盟,眉山住房和城乡建设局网站,网站的手机版m站怎么做,一个成功的网站必须具备哪几个要素队列 的定义#xff1a;一种可以是实现“先进先出”的存储结构。数据的进出类似于排队购票。队只允许队尾一端(rear)添加#xff0c;在另一端队头(front)删除。队有队头(front)和队尾(rear)两个指针。队头front指向第一个元素#xff0c;队尾rear指向无实际意义的元素#…队列 的定义一种可以是实现“先进先出”的存储结构。数据的进出类似于排队购票。队只允许队尾一端(rear)添加在另一端队头(front)删除。队有队头(front)和队尾(rear)两个指针。队头front指向第一个元素队尾rear指向无实际意义的元素即队列最后一个元素的下一位置。//队列定义typedef struct Queue{int *pBase;//数组基地址数组的首地址int front;//队头int rear;//队尾巴}QUEUE;//创建一个队列空间分配保存6个整形元素。void init (QUEUE *pQ){pQ-pBase(int*)malloc(sizeof(int)*6);//长度为6的数组pQ-front0;pQ-rear0;}队列的分类分为动态队列和静态队列两种。动态队列用链表实现。动态队列易于实现。静态队列用数组实现静态队列通常都必须是循环队列。静态队列为甚么必须是循环队列数组实现静态队列删除元素时候每删除一位front指针上移一位浪费一个单位的数组空间。这种方式添加元素的时候rear上移一个删除元素的时候front上移一个。总之都是上移。当front或者rear指到最上面一个位置再上移就移动到最下面一个位置。所以数组实现队列的时候必须是循环队列传统方式实现不了。2.循环队列需要几个参数来确定及循环队列各个参数的含义队列需要两个参数确定front和rear.2个参数不同的场合有不同的含义建议初学者先记住然后慢慢体会。队列初始化Front和rear的值都是零队列非空Front 代表的是队列的第一个元素Rear代表队列的最后一个有效元素的下一个元素队列空Front 和rear的值相等但不一定是零。2.循环队列入队伪算法讲解Rear(rear1)%数组的长度//进队队尾rear1;bool en_queue(QUEUE *pQ,int val){if(full_queue(pQ)){return false;}else{pQ-pBase[pQ-rear]val;pQ-rear(pQ-rear1)%6;}}循环队列出队伪算法讲解Front(front1)%数组的长度//出队队头位置变为(front1)%6bool out_queue(QUEUE *pQ,int *pVal){if(emput_queue(pQ))return false;else{ *pValpQ-pBase[pQ-front];pQ-frontpQ-front1;return true;}}4.判断循环队列是否已空Front与rear的值相等则该队列为空。5.如何判断循环对了是否已满预备知识 由于是循环队列front的值可能比rear大可能比rear小也能相等两者没有规律。但是队首旋转的速度不能比队尾快。当存放元素的数目等于数组的存储位置个数则rear和front重合。分不清头和尾。所以我们少用一个存储位置。c语言伪算法表示是队列满的条件if ((rear1)%数组长度front)已满Else 不满#include #include #includestdbool.h//解决不能使用bool#include malloc.h//队定义typedef struct Queue{int *pBase;//数组基地址数组的首地址int front;//队头int rear;//队尾巴}QUEUE;void init(QUEUE*);//创建循环队列bool en_queue(QUEUE*,int ); //入队void traverse_queue(QUEUE*);//遍历bool emput_queue(QUEUE* );//队是否满bool full_queue(QUEUE *);//对列是否空bool out_queue(QUEUE *,int *);//出队int main(){int Val;QUEUE Q;init(Q);en_queue(Q,1);en_queue(Q,2);en_queue(Q,3);en_queue(Q,4);en_queue(Q,5);traverse_queue(Q );//遍历if(out_queue(Q ,Val)){printf(出队成功出队的元素是%dn,Val);traverse_queue(Q );//遍历}return 0;}//创建一个队列空间分配保存6个整形元素。void init (QUEUE *pQ){pQ-pBase(int*)malloc(sizeof(int)*6);//长度为6的数组pQ-front0;pQ-rear0;}//判断循环队列是否满bool full_queue(QUEUE *pQ){if((pQ-rear1)%6pQ-front){return true;}elsereturn false;}//进队队尾rear1;bool en_queue(QUEUE *pQ,int val){if(full_queue(pQ)){return false;}else{pQ-pBase[pQ-rear]val;pQ-rear(pQ-rear1)%6;}}//利用中间变量遍历队列void traverse_queue(QUEUE *pQ){printf(队列遍历结果如下n);int i pQ-front;while(i!pQ-rear){printf(%d ,pQ-pBase[i]);i(i1)%6;}printf(n);return ;}bool emput_queue(QUEUE* pQ){if(pQ-frontpQ-rear)return true;elsereturn false;}//出队队头front1bool out_queue(QUEUE *pQ,int *pVal){if(emput_queue(pQ))return false;else{ *pValpQ-pBase[pQ-front];pQ-front(pQ-front1)%6;return true;}}