数据结构队列1230

  队列既可以用链表实现,也可以用顺序表实现。跟栈相反的是,栈一般用顺序表来顺序表来实现,而队列常用链表来实现,简称为链队列。

typedef struct QNode
{
ElemType  data;
struct QNode *node;
}QNode, *QueuePrt;
typedef struct
{
QueuePrt front, rear; //队头,尾指针
}LinkQueue;

将队头指针指向链队列的头结点,而队尾指针指向终端节点。头结点不是必要的。

创建一个队列要完成两个任务,一是在内存中创建一个头结点,二是将队列的头指针和尾指针都指向这个生成的头结点,因为此时是空队列。

initQueue(LinkQueue *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!q->fronot)
exit(0);
q->front->next=NULL;
}

入队列操作:

insertQueue(LinkQueue *q, ElemType e)
{
QueuePtr p;
p=(QueuPtr)malloc(sizeof(QNode));
if(p==NULL)
exit(0);
p->data=e;
p=>next=NULL;
q->rear->next=p;
q->rear=p;
}

出队列是将队列中的第一个元素移出,队头指针不发生变化,改变头结点的next指针即可。如果原队列只有一个元素,就应该处理一下对尾指针。

DeleteQueue(LinkQueue *q,ElemType *e)
{
QueuePtr p;
if(q->front == q->rear)
return;
p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)
q->rear=q->front;
free(p);
}

由于链队列建立在内存的动态区,因此当一个队列不再有用时应当把它及时销毁掉。

DestroyQueue(LinkQueue *q)
{
while(q->front)
{
q->rear=q->front->next;
free(q->front);
q->front=q->rear;
}
}

时间: 2024-10-05 04:40:49

数据结构队列1230的相关文章

基本数据结构-队列的实现及其运用

二.队列 队列是一种先进先出的数据结构,元素只能添加到队尾,而对元素的删除,修改,检索只能在队头进行.与栈的差异是很明显的.同样队列的实现可以基于链表,也可以基于数组.和栈的基本操作差不多,但队列多了一个指针(标号)指向末尾的元素,因为需要在末尾插入元素. 1.队列的链表实现 #ifndef QUEUE_H #define QUEUE_H #include <iostream> template <class T> class queue { public: queue(); ~q

数据结构—队列

数据结构-队列 1.队列的定义 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许插入的一端称为队尾(rear),允许删除的一端称为队头 (Front) 队列模型 2.队列的操作 队列的操作原则是先进先出的,所以队列又称作FIFO表(First in First out) 置空队:InitQueue(Q) 判队空:QueueEmpty(Q) 判队满:QueueFull(Q) 入队:En

java数据结构队列

队列类似于现实生活中的排队.队列是先进先出的原则,只允许在队列头部去除元素,队列尾部添加元素. 下面是分别用数组和链表为存储结构实现的队列 public interface Queue<T> { int size(); T remove(); void add(T element); boolean isEmpty(); void clear(); boolean hasElement(); } public class ArrayQueue<T> implements Queue

数据结构--队列实现(顺序队列和链队列)与C++模板

数据结构--队列实现(顺序队列和链队列)与C++模板 一.顺序队列 队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表. ①和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素. ②由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应置为0. 注意: ①当头尾指针相等时,队列为空. ②在非空队列里,队头指针始终指向队头元素,尾指针始终指向队尾元素的下一位置.(所以以下循环顺序队列中当队尾

数据结构--队列之C数组实现

队列是一种限定操作的线性表,它只能在表的一段插入,另外一段取出. 所以也称为先进先出数据结构(FIFO---First In First Out) C代码如下(有小bug不想调了,作为参考即可): #include<stdio.h> #define maxsize 5 typedef int ElemType; typedef struct queue { int head; int tail; ElemType Data[maxsize]; }Queue; void InitQueue(Qu

java 数据结构 队列的实现

java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java.util.*; public class Queue{ Node tail = new Node(); Node nowNode = new Node(); //永远指向队首 int size; Queue(){}; Queue(String date){ this.tail.date = dat

数据结构队列实例

1 //数据结构 --队列 2 //静态队列-用数组实现 3 //静态队列通常是循环队列 4 //循环队列讲解 5 //1.静态队列为什么必须是循环队列? 6 //2.循环队列需要几个参数来确定? 7 /* 8 front 和 rear 9 1)队列初始化,font和rear的值都为零 10 2)队列非空 11 font代表的是队列的第一个元素 12 rear代表的是队列的最后一个有效元素的下一个元素 13 3)队列空 14 front和rear值 15 */ 16 //3.循环队列各个参数的含

JavaScript数据结构——队列的实现

前面楼主简单介绍了JavaScript数据结构栈的实现,http://www.cnblogs.com/qq503665965/p/6537894.html,本次将介绍队列的实现. 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 队列的两种主要操作是:向队列中插入新元素和删除队列中的元素.插入操作也叫做入队,删除操作也叫做出队.入队操

数据结构-队列_习题

<实用数据结构> 第4章 6.1题 //算法设计题.要求:设一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的记录器count, //试写出相应的入队和出队的算法 #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; #define MAXLEN 10 #define Status int #define datatype i