导语
队列是一种只允许在一段进行插入操作,而在另一端进行删除操作的线性表。队列的特点是先进先出(FIFO),想操作系统中的作业运行就有遵循这种规则。
- 队列的结构定义
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode;
typedef struct QNode *QuerePtr;
typedef struct {
QuerePtr front;//队头指针
QuerePtr rear;//队尾指针
}LinkQuere;
- 初始化队列
//初始化队列
Status InitQuere(LinkQuere &Q) {
Q.rear=Q.front=(QuerePtr)malloc(sizeof(QNode));
if(!Q.rear) return ERROR;//存储空间分配失败
Q.front->next=NULL;
return OK;
}
- 在队尾插入新元素
//插入元素e为新的队尾元素
Status InsertQuere(LinkQuere &Q,QElemType e){
QuerePtr p;
p=(QuerePtr)malloc(sizeof(QNode));
if(!p) return ERROR;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
- 删除队头元素
//删除队头元素e
Status DeleteQuere(LinkQuere &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;//队列空
QuerePtr p;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return OK;
}
- 销毁队列
Status destroyQuere(LinkQuere &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
- 清空队列
//清空队列
Status ClearQuere(LinkQuere &Q) {
QuerePtr p,q;
Q.rear=Q.front;
p=Q.front->next;//留下头结点
Q.front->next=NULL;//
while(p){
q=p;
p=p->next;
free(q);
}
return OK;
}
- 总结:以上为队列的顺序存储,但是这种存储结构存在一些不足之处,比如存在假溢出,下回在写能完美解决假溢出的循环队列。源代码下载。
队列数据结构详解
本文详细介绍了队列这一数据结构,包括其基本概念、特点、结构定义及关键操作如初始化、插入、删除等,并探讨了顺序存储方式及其潜在问题。
30万+

被折叠的 条评论
为什么被折叠?



