队列---顺序队列(C++)

队列

队列的基本定义

队列也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。这和我们日常生活中的排队时一致的。其操作的特性是先进先出(FIFO)

队列常见的基本操作

InitQueue(&Q):初始化队列,构造一个空队列Q。
QueueEmpty(Q):判队列为空,若队列Q为空返回true,否则返回false。
EnQueue(&Q,x):入队,若队列Q未满,将x加入,使之称为新的队尾。
DeQueue(&Q,&x):出队,若队列Q非空,删除队头元素,并用x返回。
GetHead(Q,&x):读队头元素,若队列Q非空,则将队头元素赋值给x。

队列的顺序储存

队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并设两个指针:队头指针front和队尾指针rear。

循环队列

由于顺序队列会造成“假溢出”,于是引出了循环队列的概念。将顺序队列臆造为一个环状的空间。

队列的存储类型:

typedef struct {
 ElemType data[MaxSize];
 int front, rear;
}SqQueue;

初始化:

void InitQueue(SqQueue& Q) {
 Q.front = Q.rear = 0;
}

判空操作:

bool QueueEmpty(SqQueue Q) {
 if (Q.front == Q.rear) {
  return true;
 }
 else {
  return false;
 }
}

入队:

bool EnQueue(SqQueue& Q, ElemType x) {
 if ((Q.rear + 1) % MaxSize == Q.front) {//队满
  return false;
 }
 Q.data[Q.rear] = x;
 Q.rear = (Q.rear + 1) % MaxSize;
 return true;
}

出队:

bool DeQueue(SqQueue& Q, ElemType& x) {
 if (Q.front == Q.rear) {//队空
  return false;
 }
 x = Q.data[Q.front];
 Q.front = (Q.front + 1) % MaxSize;
 return true;
}

读取队头元素:

ElemType GetTop(SqQueue Q) {
 return Q.data[Q.front];
}

队列元素的个数:

int QueueLength(SqQueue Q) {
 return (Q.rear - Q.front + MaxSize) % MaxSize;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值