wordpress 整站移植,东莞住房和城乡建设网,wordpress中图片幻灯展示效果,wordpress瀑布流主题怎么设置首页显示文章数量一、原理
循环队列从功能角度具有队列的性质#xff0c;即遵从先进先出原则#xff0c;但是其存储方式是顺序存储。
循环队列的存储空间大小通常都是固定的#xff0c;通过前指针和尾指针的移动控制循环队列数据的增删。
特征#xff1a;顺序存储、先进先出、容量有限即遵从先进先出原则但是其存储方式是顺序存储。
循环队列的存储空间大小通常都是固定的通过前指针和尾指针的移动控制循环队列数据的增删。
特征顺序存储、先进先出、容量有限循环利用 设计理念
初始化一个队列空间容量为C这是循环队列能够存储数据的最大容量数设置头指针front和尾指针rear刚开始时front和rear指向同一个数据存储地址新增数据front不动rear指向下一个数据存储地址删除数据rear不懂front指向下一个数据存储地址为了防止front和rear越界front和rear在每次移动之后都会对容量C取模
当循环队列为空或为满的时候front和rear都指向同一个位置该如何区分呢
在容量为C的队列空间中取出一个数据块空间不存储数据用于区分队列空和队列满此空数据块位于front的后一个地址当rear和front之间只相隔一个数据块即规定的空数据块时不再新增数据随着队列前指针front移动空数据块也跟着移动 二、CircularQueue.h
#define _CRT_SECURE_NO_WARNINGS 1#include stdio.h
#include stdlib.h#define CAPACITY 5
// 循环队列的容量通常循环队列存储元素的个数为容量-1typedef int DataType;typedef struct CirQueue
{DataType* data;int front;int rear;
}CirQueue;void Init(CirQueue* cq)
{cq-data (DataType*)malloc(sizeof(DataType) * CAPACITY);cq-front cq-rear 0;
}int Empty(CirQueue* cq)
{return cq-front cq-rear;
}int Full(CirQueue* cq)
{return (cq-rear 1) % CAPACITY cq-front;
}void Push(CirQueue* cq, DataType x)
{if (Full(cq)){printf(循环队列已满push失败\n);return;}cq-data[cq-rear] x;cq-rear (cq-rear 1) % CAPACITY;
}void Pop(CirQueue* cq)
{if (Empty(cq)){printf(循环队列已空pop失败\n);return;}cq-front (cq-front 1) % CAPACITY;
}int Size(CirQueue* cq)
{return ((cq-rear CAPACITY) - cq-front) % CAPACITY;
}void Print(CirQueue* cq)
{if (Empty(cq)){printf(循环队列为空\n );return;}int pos cq-front;while (pos ! cq-rear){printf(%2d , cq-data[pos]);pos (pos 1) % CAPACITY;}printf(循环队列存储元素个数为%d\n, Size(cq));
} 三、test.c
#define _CRT_SECURE_NO_WARNINGS 1#include CircularQueue.hint main()
{CirQueue cq;Init(cq);Push(cq, 1);Push(cq, 3);Push(cq, 5);Push(cq, 7);Push(cq, 2);Push(cq, 4);Push(cq, 6);Push(cq, 8);Print(cq);Pop(cq);Pop(cq);Print(cq);Push(cq, 10);Print(cq);Pop(cq);Pop(cq);Pop(cq);Pop(cq);Pop(cq);Print(cq);
}