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 }
相关推荐
艾莉丝努力练剑4 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
不知道叫什么呀5 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc
秋说6 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
秋说8 小时前
【PTA数据结构 | C语言版】字符串插入操作(不限长)
c语言·数据结构·算法
遇见尚硅谷11 小时前
C语言:20250714笔记
c语言·开发语言·数据结构·笔记·算法
koooo~17 小时前
JavaScript 与 C语言基础知识差别
c语言·开发语言·javascript
mit6.82418 小时前
[Nagios Core] 通知系统 | 事件代理 | NEB模块,事件,回调
c语言·开发语言
mit6.82418 小时前
[Nagios Core] 事件调度 | 检查执行 | 插件与进程
c语言·开发语言·性能优化
刃神太酷啦19 小时前
C++ 多态详解:从概念到实现原理----《Hello C++ Wrold!》(14)--(C/C++)
java·c语言·c++·qt·算法·leetcode·面试
弱冠少年19 小时前
ESP-Timer入门(基于ESP-IDF-5.4)
c语言