嵌入式面试题 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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式_笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值