基于C语言实现顺序队列

本文详细介绍了一种基于顺序表实现的队列数据结构及其核心操作,包括初始化、销毁、入队、出队及获取队首元素等,并提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈和队列的区别在于,栈是先进后出,而队列是先进先出
下面为入队列的过程

下面为出队列的操作

下面是基于顺序表来实现队列的一些操作
对于队列操作,为了操作方便,需要设立三个变量,分别为head,tail和size,分别表示,链表的头部、尾部和链表的长度


  5 typedef struct SeqQueue
  6 {
  7     SeqQueueType data[SeqQueueMaxSize];
  8     size_t head;
  9     size_t tail;
 10     size_t size;
 11 }SeqQueue;

队列初始化
队列初始化是将之前在结构体中设立的三个变量都置为0,详细见程序
  5 //队列初始化
  6 void SeqQueueInit(SeqQueue* q)
  7 {
  8     if(q == NULL)
  9     {
 10         //非法操作
 11         return ;
 12     }
 13     q->size = 0;
 14     q->head = 0;
 15     q->tail = 0;
 16     return ;
 17 }
销毁队列
在这里碰巧和队列初始化相同

 20 void SeqQueueDestroy(SeqQueue* q)
 21 {
 22 
 23     if(q == NULL)
 24     {
 25         //非法操作
 26         return ;
 27     }
 28     q->size = 0;
 29     q->head = 0;
 30     q->tail = 0;
 31     return ;
 32 }

入队列
入队列其实就相当于在链表中插入一个节点,有两种方法,一种为头插法,一种为尾插法,在这里采用的是头插法,详细见程序
 34 //入队
 35 void SeqQueuePush(SeqQueue* q,SeqQueueType value)
 36 {
 37     if(q == NULL)
 38     {
 39         //非法操作
 40         return;
 41     }
 42     if(q->size>=SeqQueueMaxSize)
 43     {
 44         //队列已满
 45         return;
 46     }
 47     q->data[q->tail++]=value;
 48     if(q->tail>=SeqQueueMaxSize)
 49     {
 50         q->tail=0;
 51     }                                                                                                       
 52     ++q->size;
 53 }
 54 

出队列
出队列就相当于顺序表的头删或者尾删的方法,在这里选择的是顺序表的头删法,详细见程序

 55 //出队                                                                                                    
 56 void SeqQueuePop(SeqQueue* q)
 57 {
 58     if(q == NULL)
 59     {
 60         //非法操作
 61         return;
 62     }
 63     if(q->size == 0)
 64     {
 65         //队列为空
 66         return ;
 67     }
 68     ++q->head;
 69     --q->size;
 70     if(q->head == SeqQueueMaxSize)
 71     {
 72         q->head=0;
 73     }
 74 }

取队首元素
 75 //取队首元素
 76 int SeqQueueFront(SeqQueue* q,SeqQueueType* value)
 77 {
 78     if(q == NULL || value == NULL)
 79     {
 80         //非法操作
 81         return 0;
 82     }
 83     if(q->size == 0)
 84     {
 85         //队列为空
 86         return 0;
 87     }
 88     *value=q->data[q->head];
 89     return 1;
 90 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值