简易队列代码:包含基本功能 1.入队 2.出队 3.销毁队列

#include<stdio.h>
#include<stdlib.h>

//队列节点结构体
typedef struct node
{
    //数据域
    int data;

    //指针域
    struct node *next;
}*Queue_node;


//队列管理结构
typedef struct queue
{
    int size;
    struct node *queue_head;
    struct node *queue_tail;
}*Queue;


//初始化队列
Queue Init_Queue()
{
    //申请队列管理结构体内存
    Queue q_list=(Queue)malloc(sizeof(struct queue));
    if(!q_list)
    {
        return NULL;
    }

    q_list->size=0;
    q_list->queue_head=NULL;
    q_list->queue_tail=NULL;

    return q_list;    

}



//判断队列是否为空
int Queue_is_empty(Queue q_list)
{
    if(q_list)
    {
        return q_list->size==0;
        //如果size为0,返回真,否则返回假('=='为 逻辑等 )
    }
}


//入队,新节点接到队列后(队列先入先出)
int Queue_enqueue(Queue q_list,int data)
{
    if(!q_list)
    {
        return -1;
    }

    //新建节点
    Queue_node new_node=(Queue_node)malloc(sizeof(struct node));
    if(!new_node)
    {
        return -1;
    }

    new_node->data=data;
    new_node->next=NULL;

    //情况1:队伍中没有数据,所以队头和队尾都指向新节点
    if( Queue_is_empty( q_list))
    {
        q_list->queue_head=new_node;
        q_list->queue_tail=new_node;

    }
    else
    {
        q_list->queue_tail->next=new_node;
        q_list->queue_tail=new_node;
    }

    q_list->size++;//数据加1
    return 0;

}


//出队,队头的节点先出
int Queue_dequeue(Queue q_list)
{
    int data;
    if(!q_list)
    {
        return -1;
    }

    Queue_node p=q_list->queue_head;//借助指针指向需要出队的节点

    //情况1:队伍为空
    if(Queue_is_empty(q_list))
    {
        return -1;
    }
    else if(q_list->size==1)//队列中有1人
    {
        q_list->queue_head=NULL;
        q_list->queue_tail=NULL;
        p->next=NULL;
        data=p->data;
        free(p);
        p=NULL;
        q_list->size--;

    }
    else//队列中有两个以上的人
    {
        q_list->queue_head=q_list->queue_head->next;
        p->next=NULL;
        data=p->data;
        free(p);
        p=NULL;
        q_list->size--;
    }
    return data;
}


//销毁队列
int Queue_destroy(Queue *q_list)
{
    if(!q_list)
    {
        return -1;
    }
    for(int i=0;i<(*q_list)->size;i++)
    {
        Queue_dequeue(*q_list);
    }
free(*q_list);
q_list=NULL;
return 0;

}




int main()
{
    Queue q_list=Init_Queue();

    Queue_enqueue(q_list,10);
    Queue_enqueue(q_list,20);
    Queue_enqueue(q_list,30);
    Queue_enqueue(q_list,40);
    Queue_enqueue(q_list,50);

    printf("data=%d\t",Queue_dequeue(q_list));
    printf("data=%d\t",Queue_dequeue(q_list));
    printf("data=%d\t",Queue_dequeue(q_list));
    printf("data=%d\t",Queue_dequeue(q_list));
    printf("data=%d\t",Queue_dequeue(q_list));
    printf("\n");
    Queue_destroy(&q_list);
    return 0;

}
































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值