3.3栈和队列——顺序队基本操作的实现

注意:以下内容均省略思路,只有代码。此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正、建议,末学将感激不尽!

目录

1.前言

2.队列的特点(计算机二级考试中常考的知识点)

3.队列的应用

4.队列的顺序表示

 5.队列的初始化

6.求队列的长度

7.循环队列入列

8.循环队列出列

9.取队头元素


1.前言

栈和队列是特殊的线性表(被限定插入和删除)

2.队列的特点(计算机二级考试中常考的知识点

先进先出(只能在队尾插入,只能在队头删除)  

3.队列的应用

1.脱机打印输出:按申请的先后顺序依次输出。
2.多用户系统中,多个用户排成队,分时地循环使用CPU和主存。
3.按用户的优先级排成多个队,每个优先级一个队列。
4.实时控制系统中,信号按接收的先后顺序依次处理。
5.网络电文传输,按到达的时间先后顺序依次进行。  

4.队列的顺序表示

#define MAXQSIZE 100 //最大队列长度 
Typedef struct {
  QElemType *base;
  int front;
  int rear;
} SqQueue;

 5.队列的初始化

Status InitQueue(SqQueue &Q)
{
	Q.base=(QElemtype*)malloc(MAXQSIZE*sizeof(QElemtype));
	if(!Q.base) exit(OVERFLOW);//可能内存中没有足够内存空间,存储分配失败 
	Q.front=Q.rear=0;
	return OK;
} 

6.求队列的长度

Int QueueLength(SqQueue &Q)
{
	return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
} 

7.循环队列入列

Status EnQueue(SqQueue &Q,QElemType e)
{
	if(((Q.rear+1)%MAXQSIZE)==Q.front) return ERROR;
	Q.base[Q.rear]=e;
	rear=(rear+1)%MAXQSIZE;
	return OK;
} 

注意:为了避免与判断队空的方法矛盾,这里判断队满时的方法不再采用front==rear,而是采用少用一个元素空间的方法进行判断 

8.循环队列出列

Status DeQueue(SqQueue &Q,QElemType &e)
{
	if(Q.rear==Q.front) return ERROR;
	e=Q.base[Q.front];
	Q.front=(Q.front+1)%MAXQSIZE;
	return OK;
} 

注意:为了解决假上溢的问题,这里采用了引入循环队列的方法, 入列与出列操作均用到此方法

9.取队头元素

SEelmType GetHead(SqQueue &Q)
{
	if(Q.front==Q.rear) return ERROR;//队空 
	return Q.base[Q.front];
} 

从发表第一篇文章已经有近一周的时间了,特别感谢CSDN的各位友友们对我的支持与鼓励,你们的支持就是我更文最大的动力,让我们一同奋斗,冲冲冲! 

你可能感兴趣的:(数据结构,数据结构,c++,算法,队列)