队列实现一个排队系统c语言_C语言实现常用数据结构:循环队列队列顺序实现(第8篇)...

2a16d4e8c013a2436273483a3248882d.gif

「今天是学习C语言第 151 天」

纸上学来终觉浅,绝知此事要躬行。——  陆游「冬夜读书示子聿」

# 循环队列

队列使用顺序存储实现,逻辑上是一个环状空间,可以循环增加和删除数据。

1.使用头指针和尾指针分别指向队头和队尾。

2.头指针始终指向队头,尾指针指向队尾的下一个位置。

3.当头指针等于尾指针时,队列为空。

4.为方便判断队列是否已满,队列中实际少用一个数据空间,这样当队列尾指针的下一个位置等于头指针时,表明队列已满。

# 实现要点

1.循环队列使用顺序存储实现,适用于队列长度已固定。

2.对于队列长度不固定,使用链队列,链队列实现请看前一篇文章。

3.队列中留空一个位置,方便判断队列空满状态。

4.使用指针值求余数的方法,实现“循环”效果。

# 代码运行结果

输入10个数,保存到循环队列,然后输出。

请输入数据总个数:10

请依次输入10个整数:0 1 2 3 4 5 6 7 8 9

循环队列输出结果:0 1 2 3 4 5 6 7 8 9

# 代码实现:循环队列

 /* ==========================================  名称   :C语言实现常用数据结构   功能   :循环队列(顺序队列)   环境   :Windows 10 + Dev-C++编译    作者   :一只会C的猫   公众号 :C语言大全(coderpointer)  时间   :2020.8.14 ==========================================*/#include #include // 循环队列最大长度#define MAX_SIZE 100// 循环队列结构typedef struct {  // 动态分配的内存  int *base;  //  队头位置   int front;  // 队尾位置   int rear;}seq_queue;// 创建和初始化队列seq_queue *create_init_queue(){  // 创建队列结构   seq_queue *q = (seq_queue *)malloc(sizeof(seq_queue));  if(q == NULL)    return NULL;      // 动态分配队列存储空间  q->base = (int *)malloc(MAX_SIZE * sizeof(int));  if(q->base == NULL)    return NULL;    // 空队列,头尾指针相等   q->front = q->rear = 0;  return q;}// 入队int en_seq_queue(seq_queue *q, int data){  if(q == NULL)    return -1;  // 判断队列是否已满  if((q->rear+1) % MAX_SIZE == q->front)    return -1;  *(q->base + q->rear) = data;  q->rear = (q->rear + 1) % MAX_SIZE;  return 0;}// 出队int de_seq_queue(seq_queue *q, int *data){  if(q == NULL || data == NULL)    return -1;  // 判断队列是否为空   if(q->rear == q->front)    return -1;  *data = *(q->base + q->front);  q->front = (q->front + 1) % MAX_SIZE;  return 0; }// 查看队列所有元素// 只要调用出队操作即可 void print_queue(seq_queue *q){  if(q != NULL)  {    int t;    while(de_seq_queue(q, &t) != -1)      printf("%d ", t);    printf("\n");  }} // 销毁和释放void free_queue(seq_queue *q){  if(q != NULL)  {    free(q->base);    free(q);   }}int main(void){  // 创建队列保存数据   seq_queue *q = create_init_queue();  int n,d;  printf("请输入数据总个数:");  scanf("%d", &n);  printf("请依次输入%d个整数:", n);  int i;  for(i=0; i  {    scanf("%d", &d);    en_seq_queue(q, d);  }    printf("循环队列输出结果:");  print_queue(q);   // 释放内存空间   free_queue(q);  return 0;}

---------- End ----------

往期精彩推荐:

一万分钟C语言学习计划:2020开篇

C语言内存管理的两种方式

C89标准库功能简介

C语言链接与存储类型

C语言标准输入输出

C语言入门基本语法

更多请点击公众号历史文章...

4d4734685965c4bdd61e0979ef297667.png

「喜欢C请赏个 赞aa8049f9f7b339e858bd5f2bf32e0c7f.png    点击右下角 在看」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值