链式队列建立(纯C语言小白版)

#include<stdio.h>
typedef enum{false,true} bool;
typedef int Elementype;
typedef struct LinkNode{
       Elementype data;
       struct LinkNode   *next;
}*LinkNode;
typedef struct{
   LinkNode front,rear;
}*LinkQueue;

void InitQueue(LinkQueue Q)//初始化队列
{
    Q->front=Q->rear=(LinkNode)malloc(sizeof(LinkNode));//申请头结点,因此建立的是带头结点的链表
    Q->front->next=NULL;
}
bool IsEmpty(LinkQueue Q)//判定队列空
{
    if(Q->front==Q->rear)
        return true;
    else
        return false;
}

void EnQueue(LinkQueue Q,Elementype x)//入队
{
    LinkNode s=(LinkNode)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;

}//链表结构的队列一般不会满,就没加判满操作,这里的入队是入的链尾。
bool DeQueue(LinkQueue Q,Elementype x)//出队列,队列头才能出队列,说实话,我不太喜欢这么简单的思考,毕竟现实社会还有插队的是吧,哈哈。
{
    if(IsEmpty(Q))
        return false;
    else
    {
        LinkNode p=Q->front->next;
        x=p->data;
        printf("出队列的数字是:%d\n",x);
        Q->front->next=p->next;
        if(Q->rear==p)
        {
            Q->rear==Q->front;//Q->front一直在头结点位置,如果链表只有一个节点,删除后,Q->rear必须与Q->front相同,以满足IsEmpty的条件。
        }
           free(p);
        return true;
    }
}

void PrintQueue(LinkQueue Q)
{

    LinkNode p;
    p=Q->front->next;
    printf("还在队列中的数字是:");
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}

int main()
{
    LinkQueue Q;
    Q=(LinkQueue)malloc(sizeof(LinkQueue));
    InitQueue(Q);
    Elementype x;
    while(true)
    {
        scanf("%d",&x);
        if(x==999)  //当输入999,就不入队列了
            break;
        EnQueue(Q,x);
    }
    int QueueFront;
    DeQueue(Q,QueueFront);//这里的QueueFront没多大用处,主要为了满足DeQueue有两个参数的标准
    PrintQueue(Q);
}

希望明年考研前能复习好吧。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值