队列的链式存储

队列:
  只允许在一端进行插入操作,另一端进行删除操作

队列的有关操作:

Queue_Node *InitQueu();     //初始化队列
void EnQueue(Queue_Node *queue,int val);    //入队操作(尾部插入)
void DeQueue(Queue_Node *queue);            //出队操作 (头部删除)
boolean isEmpty(Queue_Node *queue);         //判断队列是否为空
void show(Queue_Node *queue);               //显示队列元素

queue.h文件(定义结构体)

#include <stdio.h>
#include <windows.h>

typedef struct Queue
{
    int val;				//保存数据
    struct  Queue *Next;	//指向下一节点
}Queue_Node;

初始化队列:

Queue_Node *InitQueu()
{
    Queue_Node *node = (Queue_Node *) malloc(sizeof(Queue_Node));
    if(node == NULL)
    {
        printf("内存申请失败\n");
        exit(-1);
    }
    node->val = 0;
    node->Next = NULL;
}

入队操作:

//将新入队元素放在队尾
void EnQueue(Queue_Node *queue,int val)
{
    Queue_Node *tmp = queue;    //保存头结点指针
    Queue_Node *node = (Queue_Node *)malloc(sizeof(Queue_Node)); //开辟空间保存数据
    if(node == NULL)
        return ;
    //找到尾结点
    while(tmp->Next != NULL)
    {
        tmp = tmp->Next;
    }
    node->val = val;		//将入队数据放入新结点
    node->Next = NULL;		//新结点的指向为空
    tmp->Next = node;		//将尾结点的指针域指向新结点
}

出队操作:

//从队头出队
void DeQueue(Queue_Node *queue)
{
    if(isEmpty(queue))
    {
        printf("队列为空,无法出队\n");
        return ;
    }
    Queue_Node *delete = queue->Next;		//用辅助结点保存首结点位置
    queue->Next = delete->Next;				//头结点指针域指向首结点指向的下一位置
    printf("出队结点数据为:\t%d\n",delete->val);	//输出出队节点数据
    free(delete);		//释放出队结点空间
}

判断队列是否为空:

boolean isEmpty(Queue_Node *queue)
{
    if(queue->Next == NULL)
        return TRUE;
    return FALSE;
}

输出队列数据元素:

void show(Queue_Node *queue)
{
    if(isEmpty(queue))
    {
        printf("队列为空,无法输出\n");
    }
    Queue_Node *node = queue->Next;
    while(node)
    {
        printf("队列数据为:\t%d\n",node->val);
        node = node->Next;
    }
}

测试:

void main()
{
    //此节点相当于头结点方便数据操作
    Queue_Node *queue;
    queue = InitQueu();     
    EnQueue(queue,2);
    EnQueue(queue,3);
    EnQueue(queue,4);
    EnQueue(queue,5); 
    printf("------入队后数据元素------\n");
    show(queue);
    printf("-------出队数据元素-------\n"); 
    DeQueue(queue);
    DeQueue(queue);
    printf("------出队后数据元素------\n");
    show(queue);
    system("pause");
    return ;
}

输出结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Byte_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值