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 }
相关推荐
小莞尔2 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing102329292 天前
Day03_刷题niuke20250915
c语言
第七序章2 天前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
l1t2 天前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
l1t2 天前
利用美团龙猫用libxml2编写XML转CSV文件C程序
xml·c语言·libxml2·解析器
Gu_shiwww2 天前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
你怎么知道我是队长2 天前
C语言---循环结构
c语言·开发语言·算法
程序猿编码2 天前
基于 Linux 内核模块的字符设备 FIFO 驱动设计与实现解析(C/C++代码实现)
linux·c语言·c++·内核模块·fifo·字符设备
mark-puls2 天前
C语言打印爱心
c语言·开发语言·算法