C++链式队列基本操作

  1 #include <iostream>
  2 #define QUEUEELEMENTTYPE int
  3 using namespace std;
  4
  5 /*结点*/
  6 typedef struct Node
  7 {
  8     QUEUEELEMENTTYPE data; /*数据域*/
  9     Node * next; /*指针域*/
 10 }LinkQueueNode;
 11
 12 /*队列*/
 13 struct LinkQueue
 14 {
 15     LinkQueueNode * front; /*头指针*/
 16     LinkQueueNode * rear;  /*尾指针*/
 17 };
 18
 19 /*将Q初始化为一个空的链队列*/
 20 int InitQueue(LinkQueue * Q)
 21 {
 22     Q->front=(LinkQueueNode * )malloc(sizeof(LinkQueueNode));
 23     if(Q->front!=0)
 24     {
 25         Q->rear = Q->front;
 26         Q->front->next=0;
 27         return true;
 28     }
 29     else
 30         return false;
 31 }
 32
 33 /*判断队列Q是否为空*/
 34 int IsEmpty(LinkQueue * Q)
 35 {
 36     if(Q->front==Q->rear)
 37         return true;
 38     return false;
 39 }
 40
 41 /*将数据元素x插入到队列中去*/
 42 int EnterQueue(LinkQueue * Q , QUEUEELEMENTTYPE x)
 43 {
 44     Node * temp = (Node * )malloc(sizeof(Node));
 45     temp->next = 0;
 46     temp->data = x;
 47     Q->rear->next = temp;
 48     Q->rear = temp;
 49     return true;
 50 }
 51
 52 /*将队列Q的队头元素出队,并存到x所指的存储空间中*/
 53 int DeleteQueue(LinkQueue * Q , QUEUEELEMENTTYPE &x)
 54 {
 55     if(Q->rear!=Q->front)
 56     {
 57         x = Q->front->next->data;
 58         Q->front=Q->front->next;
 59         return true;
 60     }
 61     return false;
 62 }
 63
 64 /*获取队头的元素,并存到x所指的存储空间中*/
 65 int GetHead(LinkQueue * Q , QUEUEELEMENTTYPE &x)
 66 {
 67     if(Q->rear==Q->front)
 68         return false;
 69     else
 70         x = Q->front->next->data;
 71     return true;
 72 }
 73
 74 /*将队列Q置为空*/
 75 void ClearQueue(LinkQueue * Q)
 76 {
 77     Q->front=Q->rear;
 78     Q->front->next=0;
 79 }
 80
 81 int main()
 82 {
 83     LinkQueue * queue=new LinkQueue;
 84     InitQueue(queue);
 85     cout << IsEmpty(queue) << endl;
 86     for(int i=0;i<1;i++)
 87         EnterQueue(queue,i);
 88     cout << IsEmpty(queue) << endl;
 89     int x = -1;
 90     DeleteQueue(queue,x);
 91     cout << "x = " << x << endl;
 92     DeleteQueue(queue,x);
 93     int y = -1;
 94     GetHead(queue,x);
 95     cout << "y = " << y << endl;
 96     cout << IsEmpty(queue) << endl;
 97     ClearQueue(queue);
 98     cout << IsEmpty(queue) << endl;
 99     return 0;
100 }
时间: 2025-01-14 05:49:05

C++链式队列基本操作的相关文章

链式队列基本操作的实现问题

问题描述:用链式存储方式实现队列的基本操作 涉及变量:front:Node型自定义变量,指向队首元素 rear:Node型自定义变量,指向队尾元素 涉及教材:<数据结构--Java语言描述(第2版)> 清华大学出版社 大致思路: 链式存储结构不害怕出队列会浪费空间,因此也不需要要循环结构来节约空间 front为指向队首结点的指针 rear为指向队尾结点的指针 初始化时它们均指向空 初始化代码如下: 队列的置空方法与初始化相类似 而判断队列是否为空只需要判断队首指针是否指向非空元素即可 代码如下

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

链式队列总结

基本数据结构之-链式队列 链式队列就是一个操作受到限制的单链表,学会了单链表再来写这个就是轻松加愉快,但是貌似我去用了两个小时搞定,主要是基础差! 队列的基本操作就是入栈和出栈,还可以看到对头和对尾 如果维护了长度参数,那么也可以返回一个长度 不说理论了,直接上代码吧! 首先定义基本数据结构的结构体: typedef struct _LINKQUEUENODE { struct _LINKQUEUENODE *next; }LinkQueueNode; typedef struct _LINKQ

c++实验5 顺序/链式队列

链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可自行对类中所定义的操作进行扩展. 所加载的库函数或常量定义及类的定义: #include<stdlib.h> #include<iostream> using namespace std; typedef int DataType; class SeqQueue{ private: D

数据结构之---C语言实现链式队列

//链式队列的存储 //杨鑫 #include <stdio.h> #include <stdlib.h> typedef int QElemType; //定义节点 typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QueuePtr; //定义指针 typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; //插入元素e进入队列 vo

【数据结构-队列】链式队列

关于链式队列 链式队列又称为链队,是使用单链表实现的,需要一个头指针一个尾指针 结构图: 链队需要的元素组成 /*链式队列的每一个节点*/ struct node{ int data;//存储数据 struct node *next;//指向下一个节点的指针 }; /*链式队列*/ typedef struct{ struct node *head;//头指针 struct node *tail;//尾指针 }LinkedQueue; 创建一个带头节点的空队列 创建一个节点p 将p节点的next

有序链式队列

  编写头文件 struct queue { int num;            //代表数据 int high;           //优先级1111 struct queue *pNext;//存储下一个节点的地址 }; typedef  struct queue Queue;                           //简化队列 Queue * init(Queue *queueHead);                        //初始化 Queue *

C++链式队列

LinkQueue: //链式队列 #include<iostream> using namespace std; typedef int elemType; struct QNode { elemType data; QNode *next; }; struct LinkQueue { QNode *front; QNode *rear; }; //初始化 void InitQueue(LinkQueue *q) { q->front = q->rear = new QNode;

数据结构基础(14) --链式队列的设计与实现

链式队列是基于单链表的一种存储表示, 其形状如下图所示: (队列的队头指针指向单链表的第一个结点, 队尾指针指向单链表的最后一个结点, 注意没有无用的空[头/尾]节点) 用单链表表示的链式队列特别适合于数据元素变动比较大的情况, 而且不存在队列满而产生溢出的情况; 链式队列结点构造: [这次我们将节点构造成了类LinkQueue的嵌套类] struct ChainNode { ChainNode(const Type &_data, ChainNode *_next = NULL) :data(