深度解析队列操作

此篇为原创,如需转载,请注明出处:http://blog.csdn.net/qq_36759732。

大家都知道,队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的一端进行插入,而在另一端进行删除元素的线性表。队尾(tail)是允许插入的一端。队头(head)是允许删除的一端。空队列是不含元素的空表。

根据这样的操作。队列特点是先进先出~
通过此篇,你将会深入了解到队列的基本操作,便于以后使用队列时更加清楚。大家知道,队列的基本操作,有出队,入队,查看队首元素等,但它本质上是如何实现的呢,下面我会通过代码实现对列的基本操作。
队列中可以存放各种类型,甚至可以再存放一个队列,为了便于解释,下面操作用存放整型数据元素实现。

编程环境:linux


  1 #include<stdio.h>
  2 #include<stdlib.h>
  3
  4 #define OK 1
  5 #define ERROR 0
  6
  7 typedef struct {
  8     int *data;
  9     int head;
 10     int tail;
 11     int length;
 12 }queue,*Queue;
 13
 14 void init(Queue q, int n){ //初始化
 15     q->data = (int *)malloc(n * sizeof(int));
 16     q->head = 0;
 17     q->tail = -1;
 18     q->length = n;
 19 }
 20
 21 int push_queue(Queue q, int value){ //入队
 22     if(q->tail == q->length - 1) return ERROR;
 23     ++q->tail;
 24     q->data[q->tail] = value;
 25     return OK;
 26 }
 27
 28 void front(Queue q){ // 查看队首元素
 29     printf("队首front: %d\n", q->data[q->head]);
 30     return ;
 31 }
 32
 33 int empty(Queue q){ // 判空
 34     if(q->tail == -1) return 0;
 35     return 1;
 36 }
 37
 38 int pop_queue(Queue q){ // 出队
 39     if(empty(q)){
 40         printf("出队: %d\n", q->data[q->head]);
 41         ++q->head;
 42         return OK;
 43     }
 44     return ERROR;
 45 }
 46
 47 void output(Queue q){ // 输出队列
 48     printf("QUEUE:");
 49     if(empty(q)){
 50         for(int i = q->head; i <= q->tail; ++i){
 51             printf(" %d", q->data[i]);
 52         }
 53         printf("\n");
 54     }
 55     return ;
 56 }
 57
 58 void clear(Queue q){ //清空
 59     free(q->data);
 60     free(q);
 61 }
 62
 63 int main(){
 64     printf("/*****************************************/\n");
 65     printf("0代表插入,1代表删除,2代表查看队首元素\n");
 66     printf("/*****************************************/\n");
 67     Queue q = (Queue)malloc(sizeof(queue));
 68     init(q,100);
 69     int opr;
 70     int value;
 71     while(scanf("%d",&opr) != EOF){
 72         switch(opr){
 73             case 0:
 74                 printf("插入元素:");
 75                 scanf("%d",&value);
 76                 push_queue(q,value);
 77                 output(q);
 78                 break;
 79             case 1:
 80                 pop_queue(q);
 81                 output(q);
 82                 break;
 83             case 2:
 84                 front(q);
 85                 break;
 86         }
 87     }
 88     return 0;
 89 }


 


以上是本人对队列操作的理解,欢迎大家指点与修正。后面我会上传栈的基本操作,大家敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值