队列操作

//head.h
#ifndef HEAD_H
#define HEAD_H
#include <stdio.h>

typedef struct Node
{
    int data;
    struct Node *next;
}Node;

typedef struct Queue
{
    Node *front;
    Node *rear;
}Queue;

Queue *CreateQueue();//构造空的队列
Queue *InQueue(Queue *q,int data);
Queue *DeQueue(Queue *q);
int GetLength(Queue *q);
void PrintQueue(Queue *q);
#endif // HEAD_H

//fun.c
#include "head.h"

Queue *CreateQueue()//构造空的队列
{
    Queue *q = (Queue*)malloc(sizeof(Queue));
    q->front = NULL;
    q->rear = NULL;

    return q;
}
//进队
Queue *InQueue(Queue *q,int data)
{
    Node *node = NULL;
    node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;

    if(q->rear == NULL)
        q->front = q->rear = node;
    else
    {
        q->rear->next = node;
        q->rear = node;
    }

    return q;
}
//出队
Queue *DeQueue(Queue *q)
{
    Node *pNode = NULL;
    pNode = q->front;

    if(pNode == NULL)
    {
        printf("Empty queue!!\n");
    }
    else
    {
        q->front = q->front->next;

        if(q->front == NULL)
        {
            q->rear = NULL;
        }
        free(pNode);
    }
    return q;
}
int GetLength(Queue *q)
{
    int nLen = 0;
    Node *pNode = q->front;
    if(pNode != NULL)
        nLen = 1;
    while(pNode != q->rear)
    {
        pNode = pNode->next;
        nLen++;
    }

    return nLen;
}
void PrintQueue(Queue *q)
{
    Node *pNode = q->front;
    if(pNode == NULL)
    {
        printf("Empty queue!!!\n");
        return;
    }
    while(pNode != q->rear)
    {
        printf("pNode->data:%d\n",pNode->data);
        pNode = pNode->next;
    }
    printf("pNode->data:%d\n",pNode->data);
}

//main.c
#include "head.h"

int main(void)
{
    int nLen = 0;
    Queue *hp = CreateQueue();
    InQueue(hp,1);
    InQueue(hp,2);
    InQueue(hp,3);
    InQueue(hp,4);

    nLen = GetLength(hp);

    printf("Len is %d\n",nLen);
    PrintQueue(hp);

    DeQueue(hp);

    PrintQueue(hp);
    return 0;
}


//结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值