数据结构 堆栈与队列-2

队列

  1. 队列是一种特殊的线性表,它只允许在表的前端front进行删除操作,在表的后端rear进行插入操作。
  2. 进行插入操作的称为队尾rear,进行删除操作的为队头。
  3. 队列中没有元素时,称为空队列。
  4. 队列具有先进先出的特点。
  5. 队列空的条件:front=rear
  6. 队列满的条件:rear=maxsize
    在这里插入图片描述

循环队列

  1. 将存储队列元素的以为数组首尾相接,形成一个环状,这种形式表示为循环队列。
  2. 通常还需要增加标志s来区分队列满还是空。
    在这里插入图片描述

循环队列顺序存储

  1. 类型定义
//队列最大数据元素数目
#define max_size 10
typedef struct SeqQueue{
	//存放队列中数据元素的存储单元
	ElemType elems[max_size];
	//队头指针、队尾指针
	int front,rear;
}SeqQueue;
  1. 入队操作
void enQueue(SeqQueue SQ,ElemType elem){
	if((SQ.rear+1)%max_size==SQ.front)
		error("overflow");
		else{
			SQ.rear=(SQ.rear+1)%max_size;
			SQ.elem[SQ.rear]=elem;
		}
}
  1. 出队操作
ElemType deQueue(SeqQueue SQ){
	if(isEmpty(SQ))
		error("Queue is empty");
	else{
		SQ.front=(SQ.front+1)%max_size;
		return SQ.elems[SQ.front];
	}
}
  1. 获取队列头元素
ElemType front(SeqQueue SQ){
	if(isEmpty(SQ)){
		error("queue is empty");
	}
	else{
		return SQ.elems[(SQ.front+1)%max_size];
	}
}
  1. 判断队列是否为空
boolean isEmpty(SeqQueue SQ){
	if(SQ.front==SQ.rear&&s==0)
		return true;
	else
		return false;
}

队列的链式存储

  1. 用链式存储结构表示队列时,需要设置队头指针和队尾指针,以便指示队头结点和队尾结点。
    在这里插入图片描述
  2. 结点结构
typedef struct lqnode{
	ElemType data;
	struct lqnode *next;
}lqnode;
  1. 链式队列
typedef struct LinkedQueue{
	lqnode *front;
	lqnode *rear;
}LinkedQueue;
  1. 初始化队列
void initiate(LinkedQueue LQ){
	LQ.front=(lqnode*)malloc(sizeof(lqnode));
	if(LQ.front==NULL)
		error;
	LQ.rear=LQ.front;
}
  1. 入队操作
void enQueue(LinkedQueue LQ,ElemType elem){
	s=(lqnode*)malloc(sizeof(lqnode));
	if(!s)
		error;
	s->data=elem;
	s->next=NULL;
	LQ.rear->next=s;
	LQ.rear=s;
}
  1. 出队操作
ElemType deQueue(LinkedQueue LQ){
	if(isEmpty(LQ))
		error;
	else{
		ElemType elem=LQ.front->next->data;
		LQ.front->next=LQ.front->next->next;
		return elem;
	}
}
展开阅读全文
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值