关于队列的简单操作

#include "stdio.h"

#include "stdlib.h"

#include "malloc.h"

typedef char DataType;

typedef struct queuenode

{

       DataType data;

       struct queuenode * next;

}QueueNode;

 

typedef struct

{

       QueueNode * front;//队头指针

       QueueNode * rear;//队尾指针

}LinkQueue;

 

void InitQueue(LinkQueue * q)

{

       q->rear=NULL;

       q->front=q->rear;

}

 

int QueueEmpty(LinkQueue * q)

{

       return q->front==NULL && q->rear==NULL; /*如果头尾指针都为空就返回1*/

}

 

void EnQueue(LinkQueue * q,DataType x)

{

       QueueNode * p;

    p=(QueueNode *)malloc(sizeof(QueueNode));

       p->data=x;

       p->next=NULL;

       if (QueueEmpty(q))

              q->front=q->rear=p;//对空直接插入

       else

       {

              q->rear->next=p; /*建立与生成的节点的链接*/

              q->rear=p; /*尾指针加一*/

       }

}

 

DataType DeQueue(LinkQueue * q)

{

       DataType x;

       if (QueueEmpty(q))

       {

              printf("Queue is empty, can't dequeue...");

              exit(-1); /*包含在函数 <stdlib.h> */

       }

       QueueNode * p;

       p=q->front; //指向对头

       x=p->data;

       q->front=p->next; //q->front->next;

       if (q->rear==p) //只有一个节点,则队空

              q->rear=NULL;

       free(p);

       return x;

}

 

void Disp(LinkQueue * s)

{

       QueueNode * p;

       p=s->front;

       printf("====================================/n");

       while (p!=NULL) 

       { 

              printf("%c/n",p->data);

              p=p->next;

       }

       printf("=====================================/n");

}

main()

{

       printf("================ 先进先出[FIFO]的链队列 DEMO  =============/n");

       LinkQueue * s;

       s=(LinkQueue *)malloc(sizeof(LinkQueue));

       InitQueue(s);

       EnQueue(s,'1');

       EnQueue(s,'2');

       EnQueue(s,'3');

       EnQueue(s,'4');

       EnQueue(s,'5');

       EnQueue(s,'6');

       printf("1,2,3,4,5,6 入队后队列中的数据序列为:/n");

       Disp(s);

       printf("第一个出队数据:%c/n",DeQueue(s));

       printf("第二个出队数据:%c/n",DeQueue(s));

       printf("第三个出队数据:%c/n",DeQueue(s));

       printf("第四个出队数据:%c/n",DeQueue(s));

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值