队列

原创 2018年04月17日 18:34:34

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

循环队列:

include<stdio.h>
#include<stdlib.h>
#define maxSize 20
typedef int QElemType;
typedef struct {
QElemType elem[maxSize];
int front, rear;
}CircQueue;
 
void InitQueue(CircQueue &Q) {
Q.front = Q.rear=0;
}
 
int EnQueue(CirQueue &Q, QElemType &x) {//进队
if((Q.rear+1)%maxSize==Q.front) return 0;//函数队列满,不能插入
Q.elem[Q.rear]=x;
Q.rear=(Q.rear+1)%maxSize;//顺时针移一位
return 1;
}
 
int DeQueue(CirQueue &Q, QElemType &x) {//出队
if(Q.front==Q.rear) return 0;
x=Q.elem[Q.front];
Q.front=(Q.front+1)%maxSize;//队头指针进一
return 1;
}
 
int GetFront(CirQueue &Q, QElemType &x) {//若队列不空,则函数通过引用参数X 返回队头元素的值
if(Q.front==Q.rear) return 0;
x=Q.elem[Q.front];
return 1;
}
 
int QueueEmpty(CirQueue &Q) {//判断队列是否为空
return Q.front==Q.rear;
}
 
int QueueFull(CirQueue &Q) {//判断队列是否已满
return (Q.rear+1)%maxSize==Q.front;
}
 
int QueueSize(CirQueue &Q) {//求队列元素个数
return (Q.rear-Q.front+maxSzie)%maxSize;
}

链式队列:

#include<stdio.h>
#include<stdlib.h>
 
typedef int QElemType;
typedef struct Node{
	QElemType data;
	struct Node *link;
}LinkNode;
 
typedef struct {
	LinkNode *front, *rear;
}LinkQueue;
 
void InitQueue(LinkQueue &Q) {//初始化队列 
	Q.front=Q.rear=NULL;
}
 
int EnQueue(LinkQueue &Q, QElemType x) {//进队 
	LinkNode *s= (LinkNode*) malloc (sizeof(LinkNode));
	s->data=x;
	s->link=NULL;
	if(Q.rear==NULL) 
		Q.front=Q.rear=s;
	else {
		Q.rear->link=s;
		Q.rear=s;
	} 
	return 1;
}
 
int DeQueue(LinkQueue &Q, QElemType &x) {//出队
	if(Q.front==NULL) return 0;
	LinkNode *P=Q.front;//存储队头元素的值 
	x=p->data;
	Q.front=p->link;
	free(q);//队头修改,释放原队头节点 
	if(Q.front==NULL) Q.rear=NULL;
	return 1;
}
 
int GetFront(LinkQueue &Q, QElemType &x) {//读取队头元素的值 
	if(Q.front==NULL) return 0;
	x=Q.front->data;
	return 1;
}
 
int QueueEmpty(LinkQueue &Q) {//判断队列是否为空 
	return Q.front==NULL
}
 
int QueueSize(LinkQueue &Q) {//求队列元素个数 
	LinkNode *p=Q.front;
	int k=0;
	while(p!=NULL) {
		p=p->link;
		k++;
	}
	return k;
}

收藏助手
不良信息举报
您举报文章:队列
举报原因:
原因补充:

(最多只允许输入30个字)