代码示例_数据结构_链式队列

链式队列

 


 

que.h

 1 #pragma once
 2 
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 
 6 #define MAXQUE 10
 7 
 8 
 9 typedef struct node{
10     int data;
11     struct node *next;
12     struct node *pdrv;
13 }node;    // 节点
14 
15 typedef struct que{
16     node *front;
17     node *rear;
18     int nuque;       // 节点数 
19 }que;    // 队列
20 
21 que* init_que(void);              // 初始化队列
22 int     check_full ( que *q);        // 检查是否已满
23 int  check_empty( que *q);        // 检查是否为空
24 int  enque(que *q,int input);   // 入队
25 int  deque(que *q);                // 出队
26 int  que_count(que *q);            // 项数
27 void del_que(que *q);            // 清空

 

 

 


 

que.c

  1 #include "que.h"
  2 
  3 
  4 // 初始化队列
  5 que* init_que(void){
  6 
  7     que *q = (que*)malloc(sizeof(que));   // 申请一个队列
  8         if(q==NULL){
  9         perror("malloc failed!");
 10         exit(1);
 11     }
 12 
 13     q->front = q->rear = NULL;
 14     q->nuque = 0;
 15 
 16     return q ;
 17 }
 18 
 19 
 20 // 检查是否已满
 21 int check_full ( que *q){
 22 
 23     return q->nuque == MAXQUE;
 24 
 25 }
 26 
 27 
 28 // 检查是否为空
 29 int check_empty( que *q){
 30 
 31     return q->nuque == 0;
 32 
 33 }
 34 
 35 
 36 // 项数
 37 int que_count(que *q){
 38 
 39     return q->nuque;
 40 
 41 }
 42 
 43 
 44 // 入队
 45 int enque(que *q,int input){
 46 
 47     if(  check_full(q) ){        // 判断是否已满
 48         printf("que full\n");
 49         return 0;
 50     }
 51 
 52     node *pnew = (node*)malloc(sizeof(node));
 53     if(pnew==NULL){
 54         perror("malloc failed!");
 55         exit(1);
 56     }
 57     pnew->data = input;
 58     pnew->next = NULL;
 59 
 60     if(  check_empty(q)  ){     // 判断是否为空
 61         q->front = pnew;        // 插头
 62         q->rear  = pnew; 
 63     }
 64         
 65     else{
 66         q->rear->next  = pnew;  // 插尾
 67         q->rear = pnew;
 68     }
 69 
 70     q->nuque++;
 71 
 72     printf("input =  %d  入队成功\n",input);
 73 
 74     return 1;
 75 }
 76 
 77 
 78 // 出队
 79 int deque(que *q){
 80 
 81     if(  check_empty(q)  ){       // 判断是否为空
 82         printf("que empty\n");
 83         return 0;
 84     }
 85     else
 86         printf("que not empty\n");
 87 
 88     printf("output =  %d  出队成功\n",q->front->data);
 89 
 90     node* pnew = q->front;       // 指向队首
 91     q->front = q->front->next;
 92     free(pnew);                  // 释放
 93     
 94     q->nuque--;
 95     printf("nuque:%d\n",q->nuque);
 96     if(q->nuque==0){               // 项数为空,头尾为空
 97         printf("队列为空\n");
 98         q->front = NULL;
 99         q->rear  = NULL;
100     }
101 
102     return 1;
103 }
104 
105 
106 // 清空
107 void del_que(que *q){
108     while(  !check_empty(q)  )
109         deque(q);
110 }

 

 

 

 


 

main.c

 1 #include "que.h"
 2 
 3 int main(void)
 4 {
 5     que *q = init_que();
 6     
 7     int i = 0;
 8     for(i=0;i<5;i++){    //     入队
 9 
10         enque(q,i);
11 
12     }
13 
14     printf("\n------------------\n\n");
15 
16     for(i=0;i<5;i++){    //    出队
17 
18         deque(q);
19 
20     }
21 
22 
23     return 0 ;
24 }

 

 

测试:


 

 

 

 

success !

 

posted @ 2019-06-26 17:25  panda_w  阅读(469)  评论(0编辑  收藏  举报