您的位置:首页 > 理论基础 > 数据结构算法

数据结构 堆栈与队列-2

2020-06-30 17:16 85 查看

数据结构 堆栈与队列-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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: