数据结构-队列-005

1链式队列

运行结果如下:
在这里插入图片描述

1.1链式队列结点定义

/*自定义一个数据类型*/
typedef struct student
{
    char name[32];
    char sex;
    int age;
}DATA_TYPE;
/*定义一个链式队列结点*/
typedef struct link_queue_node
{
    DATA_TYPE data;//数据域
    struct link_queue_node *pnext;//指针域
}LINK_QUEUE_NODE;

1.2链式队列队头结点定义

/*定义一个链式队列头*/
typedef struct link_queue_head
{
    LINK_QUEUE_NODE *pfront;
    LINK_QUEUE_NODE *prear;
    int clen;
}LINK_QUEUE_HEAD;

1.3创建链式队列的队头

/*==========创建一个链队队头==========*/
LINK_QUEUE_HEAD *create_link_queue_head(void)
{
    LINK_QUEUE_HEAD *phead=NULL;

    /*创建一个链式队列的队头空间*/
    phead=malloc(sizeof(LINK_QUEUE_HEAD));
    if(NULL==phead)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*初始化链式队列的队头*/
    phead->pfront=NULL;
    phead->prear=NULL;
    phead->clen=0;

    return phead;
}

1.4创建链式队列结点

/*==========创建一个链队结点==========*/
LINK_QUEUE_NODE *create_link_queue_node(DATA_TYPE data)
{
    LINK_QUEUE_NODE *pnode=NULL;

    /*创建一个链队结点空间*/
    pnode=malloc(sizeof(LINK_QUEUE_NODE));
    if(NULL==pnode)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*初始化链队结点*/
    pnode->data=data;
    pnode->pnext=NULL;

    return pnode;
}

1.5判断非空链式队列

/*==========判断非空链队==========*/
int is_empty_link_queue(LINK_QUEUE_HEAD *link_queue)
{
    return NULL==link_queue->pfront;
}

1.6入队

/*==========链式队列入队-尾插法==========*/
int push_link_queue(LINK_QUEUE_HEAD *link_queue,LINK_QUEUE_NODE *pnode)
{
    if(is_empty_link_queue(link_queue))
    {
        link_queue->prear=pnode;//更新链式队头尾指针
        link_queue->pfront=pnode;//更新链式队头头指针
    }
    else
    {
        link_queue->prear->pnext=pnode;//更新尾结点指针为指向新结点
        link_queue->prear=pnode;//更新链式队头尾指针
    }
    link_queue->clen++;

    return 0;
}

1.7出队

/*==========链式队列出队-头删法*/
int pop_link_queue(LINK_QUEUE_HEAD *link_queue,DATA_TYPE *data)
{
    LINK_QUEUE_NODE *pnode=NULL;

    if(is_empty_link_queue(link_queue))
    {
        return -1;
    }

    pnode=link_queue->pfront;//备份待出队的队首结点
    link_queue->pfront=pnode->pnext;//更新链式队列指向队首的指针
    if(NULL==link_queue->pfront)
    {
        link_queue->prear=NULL;
    }
    if(data!=NULL)
    {
        *data=pnode->data;
    }
    free(pnode);
    link_queue->clen--;

    return 0;
}

1.8遍历链式队列

/*==========链式队列的遍历==========*/
void link_queue_for_each(LINK_QUEUE_HEAD *link_queue,void (*pfun)(LINK_QUEUE_NODE *))
{
    LINK_QUEUE_NODE *ptmp=NULL;

    ptmp=link_queue->pfront;//初始化链式队列结点类型的中间指针变量为队首
    while(1)
    {
        if(NULL==ptmp)
        {
            break;
        }

        pfun(ptmp);
        ptmp=ptmp->pnext;
    }
}

/*==========遍历方式==========*/
void show_data(LINK_QUEUE_NODE *pnode)
{
    printf("%-10s\t%-10c\t%-10d\n",pnode->data.name,pnode->data.sex,pnode->data.age);
}

1.9清空链式队列

/*==========清空链式队列==========*/
void clear_link_queue(LINK_QUEUE_HEAD *link_queue)
{
    while(1)
    {
        if(is_empty_link_queue(link_queue))
        {
            break;
        }

        pop_link_queue(link_queue,NULL);
    }
}

1.10销毁链式队列

/*==========销毁链式队列==========*/
void destroy_queue(LINK_QUEUE_HEAD *link_queue)
{
    clear_link_queue(link_queue);
    free(link_queue);
}

相关推荐

  1. 数据结构-队列

    2024-03-27 14:22:03       55 阅读
  2. 数据结构队列

    2024-03-27 14:22:03       68 阅读
  3. 数据结构-队列

    2024-03-27 14:22:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 14:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 14:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 14:22:03       82 阅读
  4. Python语言-面向对象

    2024-03-27 14:22:03       91 阅读

热门阅读

  1. 程序员开发技术整理

    2024-03-27 14:22:03       33 阅读
  2. Vue小练习:记录任务所花费时间

    2024-03-27 14:22:03       44 阅读
  3. 分布式事务

    2024-03-27 14:22:03       42 阅读
  4. vue自定义组件实现父子组件数据双向绑定

    2024-03-27 14:22:03       38 阅读
  5. 网络连接中——长连接和短连接详解

    2024-03-27 14:22:03       39 阅读
  6. 物联网(IoT)常用的通信协议

    2024-03-27 14:22:03       40 阅读
  7. deepspeed chat RLHF 个人笔记(待完成)

    2024-03-27 14:22:03       41 阅读
  8. 【Postman】如何给请求的参数设置随机数

    2024-03-27 14:22:03       37 阅读
  9. excel创建和部分使用

    2024-03-27 14:22:03       41 阅读
  10. 数据结构链栈实现(c语言)

    2024-03-27 14:22:03       44 阅读
  11. 软件工程的相关知识点

    2024-03-27 14:22:03       35 阅读