基于C语言实现顺序队列

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

基于C语言实现顺序队列_第1张图片

下面为出队列的操作
基于C语言实现顺序队列_第2张图片

下面是基于顺序表来实现队列的一些操作
对于队列操作,为了操作方便,需要设立三个变量,分别为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 }

你可能感兴趣的:(数据结构)