数据结构-链队

  1 #include <iostream>
  2 #include <stdlib.h>
  3
  4 using namespace std;
  5
  6 typedef struct QNode
  7 {
  8     int data;
  9     struct QNode *next;
 10 }QNode; //队结点
 11 typedef struct
 12 {
 13     QNode *front;
 14     QNode *rear;
 15 }LiQueue;//链队类型
 16
 17 void InitQueue(LiQueue *&Q)
 18 {
 19     Q=(LiQueue*)malloc(sizeof(LiQueue));
 20     Q->front=Q->rear=NULL;
 21 }
 22
 23 int IsEmpty(LiQueue *Q)
 24 {
 25     if(Q->front==NULL||Q->rear==NULL)
 26         return 1;
 27     else
 28         return 0;
 29 }
 30
 31 void EnQueue(LiQueue *Q,int e)
 32 {
 33     QNode *p;
 34     p=(QNode*)malloc(sizeof(QNode));
 35     p->data=e;
 36     p->next=NULL;
 37
 38     if(Q->rear==NULL)
 39         Q->front=Q->rear=p;
 40     else
 41     {
 42         Q->rear->next=p;
 43         Q->rear=p;
 44     }
 45 }
 46
 47 int DeQueue(LiQueue *Q,int &e)
 48 {
 49     QNode *p;
 50     if(Q->rear==NULL)
 51         return 0;
 52     else
 53         p=Q->front;
 54
 55     if(Q->front==Q->rear)
 56         Q->front=Q->rear=NULL;
 57     else
 58         Q->front=Q->front->next;
 59     e=p->data;
 60     free(p);
 61     return 1;
 62 }
 63
 64 int Print(LiQueue *Q)
 65 {
 66     if(Q->front==NULL||Q->rear==NULL)
 67     {
 68         cout<<"\n队空!\n";
 69         return 0;
 70     }
 71
 72     QNode *p;
 73     p=Q->front;
 74     cout<<"队中元素依次为:\n";
 75     while(p!=Q->rear)
 76     {
 77         cout<<"  "<<p->data<<"  ";
 78         p=p->next;
 79     }
 80     cout<<"  "<<p->data<<"  ";
 81     return 1;
 82 }
 83
 84 int main()
 85 {
 86     int i,e;
 87     LiQueue *Q;
 88     InitQueue(Q);
 89     for(i=0;i<10;++i)
 90         EnQueue(Q,i);
 91     if(IsEmpty(Q)==1)
 92         cout<<"\n队空!\n";
 93     else
 94         cout<<"\n队非空!\n";
 95     Print(Q);
 96     cout<<"\n--------------------------------\n";
 97     cout<<"依次出队3个元素为:\n";
 98     for(i=0;i<3;++i)
 99     {
100         DeQueue(Q,e);
101         cout<<"  "<<e<<"  ";
102     }
103     if(IsEmpty(Q)==1)
104         cout<<"\n队空!\n";
105     else
106         cout<<"\n队非空!\n";
107     Print(Q);
108     cout<<"\n--------------------------------\n";
109
110     return 0;
111 }
时间: 2024-10-27 12:37:06

数据结构-链队的相关文章

数据结构之自建算法库——链队(链式队列)

本文针对数据结构基础系列网络课程(3):栈和队列中第10课时队列的链式存储结构及其基本运算的实现. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 链队算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:liqueue.h,包含定义链队数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef LIQUEUE_H_INCLUDED #define LIQUEUE_H_INCLUDED typedef char ElemType; typ

数据结构 - 链队列的实行(C语言)

数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示. 空队列时,front和rear都指向头结点,如下图所示. 链队列的结构为: typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode /* 结点结构 */ { QElemTy

DS之顺序栈和链队实现回文判断

顺序栈和链队的基本操作就不再一一列举了,要想实现回文判断,先来了解什么是回文?"回文"一字符串正着读和反着读是相同的字符序列,如"abcba","abba"为"回文","abab"则不是"回文". 其次就是顺序栈和链队如何实现回文的判断?将输入的字符串依次入栈和入队,然后再依次出栈和出队,由于入栈和入队是相同的序列,然而出栈和出队是相反的序列,这就实现了回文的判断. 最后考虑要用到顺序栈

判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)

回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 2 class CharNode 3 { 4 public char Char //字符 5 { 6 get; 7 set; 8 } 9 public CharNode Next //下一节点 10 { 11 get; 12 set; 13 } 14 public CharNode(char Cha

链队的基本操作

链队的基本操作: 1,存储结构: 2,创建链式队列: 3,队尾插入,队首删除: 4,遍历操作: typedef int QElemType; typedef struct node { int data; struct node *next; }QNode,*QueuePre; typedef struct { QueuePre Front; QueuePre rear; }LinkQueue; void CreatQueue(LinkQueue &Q) { Q.rear=(QueuePre)m

数据结构 - 链栈的实行(C语言)

数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它俩合二为一呢,所以比较好的办法是把栈顶放在单链表的头部(如下图所示).另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的. 对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是 top=NULL 的时候. 链栈的结构代码如下: /* 链栈

Java实现链队

一.分析 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.允许插入的一端称为队尾,允许删除的一端称为队头. 链队是指采用链式存储结构实现的队列,它的基本操作如下: 1.初始化链队 2.销毁链队 3.清空链队 4.检测链队是否为空 5.返回链队的元素个数 6.返回链队头元素 7.向队尾插入元素 8.删除并返回队头元素 9.遍历链队 通常链队用单链表来表示,但一个链队还需要两个分别指示队头和队尾的指针才能唯一确定,和单链表一样,为了便于操作,附设一个头结点来指示队头. 在

数据结构——链队列实现二叉树的层次遍历

在二叉树的遍历这篇博客中https://www.cnblogs.com/wkfvawl/p/9901462.html 对于二叉树的层次遍历我只是给出了基于C++ STL的代码,这里我使用数据结构的链表,构建一个链队列来实现.这也算是我第一次使用链队列来完成某个任务,链队列代码还是来自课本,因为之前使用C++ STL时,queue中的某些函数是有返回值的列如Q.front(),而有些却没有返回值像Q.push(p),Q.pop(),就连有没有参数也是不同的,在这里我没有改动课本上的代码来适应自己的

数据结构——链队列(linked queue)

/* linkedQueue.c */ /* 链队列 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> /* 链队列数据结构 */ typedef struct node { int data; /* 节点存储数据 */ struct node *next; /* 指向下一个节点的指针 */ } Node; /* front指向队列头,rear指向队列尾 */ /* front->next