线性表--队列

简介:

和栈相反,队列是一种先进先出(first in first out 缩写为FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。

双端队列:限定插入和删除操作在表的两端进行的线性表

 

-----单链队列 队列的链式存储表示------ 

和线性表类似,队列也可以有两种存储表示。用链表表示的队列简称链队列。

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 = (Queueptr) malloc ( sizeof(QNode));

  if(!q.front) exit;

  q.front->next = NULL;

  return ok;

}

 

status DestroyQueue(LinkQueue & q)

{

  while(q.front)

  {

    q.rear= q.front->next;

    free(q.front);

    q.front = q.rear;

  }

  return ok;
}

status EnQueue(LinkQueue & q, QElemType e)

{

  p = (Queueptr) malloc(sizeof(QNode));

  if(!p) exit;

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

  q->rear ->next  = p;

  q->rear = p;

  return ok;
}

status DeQueue(LinkQueue & q,QElemType &e)

{

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

  p = q.front->next;

  e = q.data;

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

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

  free(p);

  return ok;

}

-----循环队列 队列的顺序存储表示------

status InitQueue(SqSqueue & q) {

  q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));

  if(!q.base) exit;

  q.front = q.rear = 0;

  return ok;

}

 int QueueLength(SqSqueue & q) {

  return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;

}

status EnQueue(SqSqueue & q,QElemType e) {

  if((q.rear+1)%MAXQSIZE == q.front) return ERROR;

  q.base[q.rear]  = e;

  q.rear = (q.rear+1)%MAXQSIZE;

  return ok;

}

status DeQueue(SqSqueue & q,QElemType &e) {

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

  e = q.base[q.front];

  q.front = (q.front+1) % MAXQSIZE;

  return ok;

}

 



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/archive/2013/06/11/3131595.html,如需转载请自行联系原作者

相关文章
|
8天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
26 0
|
2月前
单链表实现【队列】
单链表实现【队列】
39 0
|
3月前
|
存储 数据安全/隐私保护 C++
数据结构01-线性结构-链表栈队列-队列篇
数据结构01-线性结构-链表栈队列-队列篇
|
3月前
|
缓存
队列的实现及操作(链表实现)
队列的实现及操作(链表实现)
|
5月前
|
消息中间件 前端开发 JavaScript
使用数组实现队列
使用数组实现队列
26 0
|
8月前
|
C++
7.5 C/C++ 实现链表队列
链表队列是一种基于链表实现的队列,相比于顺序队列而言,链表队列不需要预先申请固定大小的内存空间,可以根据需要动态申请和释放内存。在链表队列中,每个节点包含一个数据元素和一个指向下一个节点的指针,头节点表示队头,尾节点表示队尾,入队操作在队尾插入元素,出队操作在队头删除元素,队列的长度由节点数量决定。由于链表队列没有容量限制,因此可以处理任意数量的元素,但是相比于顺序队列,链表队列的访问速度较慢,因为需要通过指针来访问下一个节点。
50 0
|
10月前
|
存储
瞬解 队列 -- 循环队列问题(超超超详解)
瞬解 队列 -- 循环队列问题(超超超详解)
46 0
|
11月前
|
Java
线性结构-队列
线性结构-队列
3975 0
线性结构-队列
|
存储
【LC】用栈实现队列,用队列实现栈,设计循环队列
【LC】用栈实现队列,用队列实现栈,设计循环队列
74 0
【LC】用栈实现队列,用队列实现栈,设计循环队列
|
存储 索引
【数据结构】—— 队列(有序队列及环形队列的数组实现)
【数据结构】—— 队列(有序队列及环形队列的数组实现)
164 0
【数据结构】—— 队列(有序队列及环形队列的数组实现)