链队列

链队列的实质就是只限制在表头做添加,表尾做删除的单链表

一 链队列示意图

注:增加指向链表的队尾指针,便于在表尾做插入操作;其中Q为LinkQueue型的指针。

二 链队列基本运算

[cpp] view plain copy

 

  1. //置空队  
  2.      void InitQueue(LinkQueue *Q)  
  3.      {  
  4.            Q->front=Q->rear=NULL;  
  5.      }  

[cpp] view plain copy

 

  1. //判队空  
  2.      intQueueEmpty(LinkQueue *Q)  
  3.      {  
  4.            return Q->front==NULL&&Q->rear==Null;  
  5.            //实际上只须判断队头指针是否为空即可  
  6.      }  

[cpp] view plain copy

 

  1. //入队  
  2. void EnQueue(LinkQueue *Q,DataType x)  
  3. {  
  4.     QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode));//申请新节点  
  5.     p->data = x;  
  6.     p->next = NULL;  
  7.     if(QueueEmpty(Q))  
  8.         Q->front = Q->rear = p;//将x插入到空队列  
  9.     else  
  10.     {  
  11.         //x插入到非空队列的尾  
  12.         Q->rear->next = p;//*p链到原队尾节点后  
  13.         Q->rear = p;//队尾指针指向性的队尾  
  14.     }  
  15. }  

[cpp] view plain copy

 

  1. //出队  
  2. DataType DeQueue(LinkQueue *Q)  
  3. {  
  4.     DataType x;  
  5.     QueueNode *p;  
  6.     if(QueueEmpty(Q))  
  7.         Error("Queue undefflow");//下溢  
  8.     p = Q->front;//指向对头结点  
  9.     x = p->data;//保存头结点的数据  
  10.     Q->front = p->next;//将对头从节点上摘下来  
  11.     if(Q->rear=p)//原队中只有一个节点,删去后队列变空此时的头指针已为空  
  12.         Q->rear = NULL;  
  13.     free(p);  
  14.     return x;  
  15.   
  16. }  

转载:http://blog.csdn.net/xsf50717/article/details/39938553

时间: 2024-12-23 09:17:41

链队列的相关文章

大话数据结构九:队列的链式存储结构(链队列)

1. 链队列的特点: 链队列其实就是单链表,只不过它是先进先出的单链表,为了实现方便,程序中设置了队头(front),队尾(rear)两个指针. 2. Java使用链表实现队列: //结点类,包含结点的数据和指向下一个节点的引用 public class Node<E> { private E data; // 数据域 private Node<E> next; // 指针域保存着下一节点的引用 public Node() { } public Node(E data) { thi

指针-@数据结构大神:链队列的5种操作,33行判断节点为空,为啥会错?求解释!(没加头节点)

问题描述 @数据结构大神:链队列的5种操作,33行判断节点为空,为啥会错?求解释!(没加头节点) 解决方案 传进来的参数Q是个NULL 解决方案二: Q没有分配空间

指针-@数据结构大神:链队列的5种操作,42行判断队为空,为啥会错?求解释!`

问题描述 @数据结构大神:链队列的5种操作,42行判断队为空,为啥会错?求解释!` int Init_Queue(LinkQueue *Q) { Q=(LinkQueue*)malloc(sizeof(LinkQueue)); if(Q==NULL) return 0; Q->front=(QueueNode*)malloc(sizeof(QueueNode)); if(Q->front==NULL) return 0; Q->rear=(QueueNode*)malloc(sizeof

线性表-(有头节点)@数据结构大神:链队列的5种操作,33行判断节点为空,为啥会错?求解释!

问题描述 (有头节点)@数据结构大神:链队列的5种操作,33行判断节点为空,为啥会错?求解释! //链队列的5种操作.c include include include define Stack_Size 50 typedef struct QueueNode{ int data;//数据保持原来结构即可 struct QueueNode *next;//注意next是QueueNode里面的东西,结构为Struct QueueNode }QueueNode; QueueNode *head=N

求助java链队列

问题描述 完成链队列LinkedQueue:classLinkedQueue{//定义内部类Node,描述结点classNode{privateintdata;privateNodenext;Node(){next=null;}Node(intvalue){data=value;next=null;};Node(intvalue,NodepNext){data=value;next=pNext;};NodegetNode(){returnnext;};intgetData(){returndat

数据结构的C++实现之队列的链式存储结构

队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列.为了操作上的 方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点.空队列时,front和rear都指向头节点. 示例程序 :(改变自<大话数据结构>) #include<iostream> using namespace std; typedef int ElemType; typedef struct Node { ElemType data; struct Node *nex

[数据结构] 队列

队列 队列是一种操作受限制的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.  队列中没有元素时,称为空队列.在队列这种数据结构中,最先插入的元素将是最先被删除的元素:反之最后插入的元素将是最后被删除的元素,因此队列又称为"先进先出"(FIFO-first in first out)的线性表. 队列空的条件:front=rear 队列满的条件: rear = MAXSIZE 顺序队列 建立顺

数据结构——队列

1 队列是一种只允许在表的一端插入元素,在另一端删除元素的特殊的线性表.允许插入的一端成为队尾(rear),允许删除的一端成为队头(front).当队列中没有任何元素时成为空队列.队列是一种先进先出的线性表,简称FIFO表. 2 与栈类似,队列也是一种操作受限的特殊的线性表,同样可以采用顺序存储结构和链式存储结构来表示队列. 3 队列的顺序存储表示--循环队列 队列的顺序存储表示同样是利用一维数组来实现.为了解决"假溢出"问题,可以将队列的数组看成是头尾相接的环状空间,当队尾元素放到数

数据结构教程 第十三课 队列

教学目的: 掌握队列的类型定义,掌握链队列的表示与实现方法 教学重点: 链队列的表示与实现 教学难点: 链队列的表示与实现 授课内容: 一.队列的定义: 队列是一种先进先出的线性表.它只允许在表的一端进行插入,而在另一端删除元素.象日常生活中的排队,最早入队的最早离开. 在队列中,允许插入的的一端叫队尾,允许删除的一端则称为队头. 抽象数据类型队列: ADT Queue{ 数据对象: D={ai| ai(-ElemSet,i=1,2,...,n,n>=0} 数据关系: R1={<ai-1,ai