队列结构的实现(数据结构课本3.4)

队列:顾名思义是一种排队的形式存储与释放数据,先进先出,先进入队列的排在前边,先输出,后进入队列的排在后边后出队列。队列起始仅仅基于顺序表增加了两个指针,一个指向顺序队列的起始端,一个指向顺序队列的末端,当每次删除一个元素时,头指针后移,每次存入一个数据时,尾指针后移,当头指针与尾指针指向同一个空位置结点时,这是的队列为空队列。

另一个特殊的队列就是循环队列,循环是人为臆造出来的,就是当尾指针达到了最大长度的时候让他再次指向顺序队列的起始地址,当它和头指针指向同一个地址区域时,说明此时的循环队列为空队列。这样相较于一般队列更有效的利用了存储空间。

循环队列关键是设置标志位或者尾指针后头指针前设置一个空的元素空间来表示此时队列已满,本实验就是如此,所以在申请空间大小时要预先多申请一个空间单位。“(Q.rear+1)%LIST_INIT_SIZE==Q.front)”这里的+1就是加上了空空间,避免了Q.rear==Q.front 的情况,因为队列的起始情况就满足Q.rear==Q.front,不能这样设置。这里最好是敲代码验证以下,文字说明不太清晰。

(本实验是针对循环队列写的)

#include 
#include 
#include 
#include 
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define LIST_INIT_SIZE 7
typedef int Status;
typedef Status ElemType;
typedef struct{
	ElemType *elem;
	ElemType front;
	ElemType rear;
}SQueue; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

Status InitList(SQueue &Q);
Status Queuelength(SQueue &Q);
Status EnQueue(SQueue &Q,ElemType i);
Status DelQueue(SQueue &Q,ElemType &i);

int main(int argc, char *argv[]) {
	ElemType k,j,m,u,c,d;
	SQueue Q,L;
	InitList(Q); 
	L=Q;
	//检测初始化函数InitList和插入元素函数EnQueue 
	printf("请输入往队列中填充的数据:"); 
	for(j=0;j

 

运行结果:

队列结构的实现(数据结构课本3.4)_第1张图片

你可能感兴趣的:(数据结构)