数据结构-队列

队列(FIFO

一种特殊的线性表,限定在队头删除在队尾插入。

-


ADT Queue{

数据对象:D={ai|aiELemSet,i=1,2,…n,n>=0}

数据关系:R={<ai-1,ai>|ai-1,aiD,i=2,…n}

基本操作:

InitQueue(&Q);     //构造一个空队列

DestroyQueue(&Q);  //销毁队列

ClearQueue(&Q);   //将队列清空

QueueEmpty(Q);   //判断队列是否为空队列

QueueLength(Q);    //返回队列的长度

GetHead(Q,&e);   //返回队头元素

EnQueue(&Q,e);   //在队尾插入新元素

DeQueue(&Q,&e);   //删除队首元素

}//ADT Queue

-实现

-队列的链式表示

typedef struct QNode{

QElemType data;

struct QNode *next;

}QNode,*QueuePtr;

typedef struct{

QueuePtr front;

QueuePtr rear;

}LinkQueue;


-初始化队列

status InitQueue(LinkQueue &Q){

Q.front=Q.rear=new QNode;

if(!Q.front) return ERROR;

Q.front->next=null;

return Ok;

}//InitQueue


-入队

status EnQueue(LinkQueue &Q,QElemType e){

p=new QNode;

if(!p) return ERROR;

if(Q.front==Q.rear) Q.front->next=p;

p->data=e;p->next=null;

Q.rear->next=P;

Q.rear=p;

return Ok;

}//EnQueue


-出队

status DeQueue(LinkQueue &Q,QElemType &e){

if(Q.front==Q.rear) return ERROR;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p) Q.rear=Q.front;

free(p);

return Ok;

}//DeQueue


-队列的顺序表示

-假溢出:当元素被插入到数组中下标最大的位置上之后,尽管此时数组的低端还有空闲空间,但不能再有入队操作了,这种现象叫做假溢出。

-循环队列:将存储队列的数组头尾相接。用求mod的方式确定位置。

-队空:front=rear;   队满(修改版):浪费一个元素空间(rear+1%MaxSize==front;使用计数器;设置一个bool变量。

       -循环队列中的元素个数的计算:当rear>=front,rear-front;当rear<front,rear-front+队列容量;

                                                   或使用公式   L=(容量+rear-front)%容量

约定rear指向队尾元素的后一位置,front指向队头元素。

const MAXQUEUE=100;

typedef struct{

QELemType Data[MAXQUEUE];

int front,rear;

}Queue;

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值