C/C++ 数据结构 - 队列

1.队列

https://blog.csdn.net/LiuBo_01/article/details/80412290

复制代码
1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct Node
  5 {
  6     int data;
  7     struct Node* next;
  8 }N;
  9 
 10 typedef struct
 11 {
 12     N* front;
 13     N* rear;
 14 }Q;
 15 
 16 //初始化队列
 17 void Init(Q* q)
 18 {
 19     //创建一个头结点
 20     N* n = (N*)malloc(sizeof(N));
 21     q->front = q->rear = n; //队头和队尾指向头结点
 22     q->front->next = NULL;
 23 }
 24 
 25 //判断队列是否为空
 26 int IsEmpty(Q* q)
 27 {
 28     if (q->front->next == NULL)
 29     {
 30         return 1;
 31     }
 32     return 0;
 33 }
 34 
 35 //入队操作
 36 void Enter(Q* q, int data)
 37 {
 38     //创建一个新结点
 39     N* n = (N*)malloc(sizeof(N));
 40     n->data = data;  //将数据元素赋值给结点的数据域
 41     n->next = NULL;  //将结点的指针域置空
 42     q->rear->next = n;   //将原来队列的队尾指针指向新结点
 43     q->rear = n;      //将队尾指针指向新结点
 44 }
 45 
 46 //出队操作
 47 void Delete(Q* q,int* data)
 48 {
 49     if (IsEmpty(q))
 50     {
 51         printf("队列为空!\n");
 52         return;
 53     }
 54     //pDel指向队头元素,由于队头指针front指向头结点,所以pDel指向头结点的下一个结点
 55     N* n = q->front->next;
 56     *data = n->data;   //将要出队的元素赋给data
 57     q->front->next = n->next;  //使指向头结点的指针指向pDel的下一个结点
 58     //如果队列中只有一个元素,将队列置空
 59     if (q->rear = n)
 60     {
 61         q->rear = q->front;
 62     }
 63     free(n);   //释放pDel指向的空间
 64 }
 65 
 66 //取队头元素
 67 int GetHead(Q* q, int* data)
 68 {
 69     if (IsEmpty(q))
 70     {
 71         printf("队列为空!\n");
 72         return 0;
 73     }
 74     N* n;
 75     n = q->front->next;  //pCur指向队列的第一个元素,即头结点的下一个结点
 76     *data = n->data;      //将队头元素值赋给data
 77     return *data;             //返回队头元素值
 78 }
 79 
 80 //打印队列中的元素
 81 void Print(Q* q)
 82 {
 83     N* n;
 84     n = q->front->next;
 85     while (n)
 86     {
 87         printf("%d ", n->data);
 88         n = n->next;
 89     }
 90     printf("\n");
 91 }
 92 
 93 int main()
 94 {
 95     Q q;
 96     int x;
 97     Init(&q);
 98     Enter(&q,1);
 99     Enter(&q,2);
100     Enter(&q,3);
101     Enter(&q,4);
102     Print(&q);
103     Delete(&q,&x);
104     printf("%d\n",x);
105     GetHead(&q,&x);
106     printf("%d\n",x);
107     Print(&q);
108 
109     return 0;
110 }
相关推荐
71-31 小时前
C语言练习题——判断水仙花数(0-100000)
c语言·笔记·学习
jzhwolp2 小时前
从基本链表到侵入式链表,体会内核设计思路
c语言·后端·设计模式
biter down3 小时前
c语言18:结构体位段联合体
c语言·开发语言
程序员buddha4 小时前
C语言操作符详解
java·c语言·算法
云知谷6 小时前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
树在风中摇曳7 小时前
C语言 | 文件操作详解与实战示例
c语言·开发语言
雨落在了我的手上7 小时前
C语言入门(十六):指针(2)
c语言
say_fall8 小时前
C语言编程实战:每日刷题 - day 1
c语言·开发语言·学习
IoT智慧学堂8 小时前
C语言流程控制:if判断语句全解析
c语言·开发语言
EXtreme358 小时前
C语言指针深度剖析(2):从“数组名陷阱”到“二级指针操控”的进阶指南
c语言·开发语言·算法