有序链式队列

简介:   编写头文件 struct queue {     int num;            //代表数据     int high;           //优先级1111     struct queue *pNext;//存储下一个节点的地址 }; typedef  struct queue


  1. 编写头文件

struct queue

{

    int num;            //代表数据

    int high;           //优先级1111

    struct queue *pNext;//存储下一个节点的地址

};

typedef  struct queue Queue;                           //简化队列

Queue * init(Queue *queueHead);                        //初始化

Queue * EnQueue(Queue *queueHead, int num, int high);  //入队

Queue * DeQueue(Queue *queueHead, Queue *pOut);        //出队

Queue * freeall(Queue *queueHead);                   //清空

void  sort(Queue *queueHead);                          //优先级排队

void printfall(Queue *queueHead);                      //打印所有数据,递归

Queue * insertEnQueue(Queue *queueHead, int num, int high);

 

  1. 编写实现队列的代码

#include "Queue.h"

#include <stdio.h>

#include <stdlib.h>

 

//初始化

Queue * init(Queue *queueHead)

{

    return NULL;

}

 

//入队

Queue * EnQueue(Queue *queueHead, int num, int high)

{

    //分配内存

    Queue *pnewnode = (Queue *)malloc(sizeof(Queue));

    pnewnode->num = num;

    pnewnode->high = high;

    pnewnode->pNext = NULL;

 

    if (queueHead == NULL)

    {

        queueHead = pnewnode;

    }

    else

    {

        Queue *p = queueHead;

        while (p->pNext != NULL)

        {

            p = p->pNext;

        }

        //确定要插入的位置

        //插入,这里是尾部插入

        p->pNext = pnewnode;

    }

    return queueHead;

}

 

//出队

Queue * DeQueue(Queue *queueHead, Queue *pOut)

{

    if (queueHead == NULL)

    {

        return NULL;

    }

    else

    {

        //这里相当于是

        pOut->num = queueHead->num;

        pOut->high = pOut->high;

        Queue *pTemp = queueHead;    

        //记录要删除的地址

        queueHead = queueHead->pNext;

        //释放节点

        free(pTemp);

 

        return queueHead;

    }

}

 

////优先级排队

//void sort(Queue *queueHead)

//{

//  if (queueHead == NULL || queueHead->pNext == NULL)

//  {

//      return;

//  }

//  else

//  {

//      for (Queue *p1 = queueHead; p1 != NULL;p1 = p1->pNext)

//      {

//          for (Queue *p2 = queueHead; p2 != NULL;p2 = p2->pNext)

//          {

//              if (p1->high > p2->high)

//              {

//                  Queue temp;

//                  temp.num = p1->num;

//                  p1->num = p2->num;

//                  p2->num = temp.num;

//

//                  temp.high = p1->high;

//                  p1->high = p2->high;

//                  //交换节点数据

//                  p2->high = temp.high;

//              }

//          }

//      }

//  }

//}

 

//打印所有数据,递归

void printfall(Queue *queueHead)

{

    if (queueHead == NULL)

    {

        return;

    }

    else

    {

        printf("%d,%d,%p,%p\n", queueHead->num, queueHead->high, queueHead, queueHead->pNext);

        printfall(queueHead->pNext);

    }

}

 

Queue * insertEnQueue(Queue *queueHead, int num, int high)

{

    //分配内存

    Queue  *pnewnode = (Queue *)malloc(sizeof(Queue));

    pnewnode->num = num;

    pnewnode->high = high;

    //节点为空

    if (queueHead == NULL)

    {

        pnewnode->pNext = NULL;

        queueHead = pnewnode;

        return queueHead;

    }

    else

    {

        //头插

        if (pnewnode->high > queueHead->high)

        {

            //头部插入

            pnewnode->pNext = queueHead;

            //指向这个节点

            queueHead = pnewnode;

            return queueHead;

        }

        else

        {

            //头节点

            Queue *p = queueHead;

            while (p->pNext != NULL)

            {

                p = p->pNext;

            }

            //循环到尾部

            if (pnewnode->high <= p->high)

            {

                p->pNext = pnewnode;

                pnewnode->pNext = NULL;

                return queueHead;

            }

            else

            {

                Queue *p1, *p2;

                p1 = p2 = NULL;  //避免野指针

                p1 = queueHead;  //头结点

                while (p1->pNext != NULL)

                {

                    p2 = p1->pNext;

                    if (p1->high >= pnewnode->high && p2->high<pnewnode->high)

                    {

                        pnewnode->pNext = p2;

                        p1->pNext = pnewnode;//插入

                        break;

                    }

                    p1 = p1->pNext;

                }

                return queueHead;

            }

        }

    }

}

 

3.编写主函数

#include "Queue.h"

#include <stdio.h>

#include <stdlib.h>

 

int main(int argc,char *argv[])

{

    //创建头结点

    Queue *phead = NULL;

    //初始化

    phead = init(phead);

    phead = insertEnQueue(phead, 1, 1);

    printfall(phead);

    phead = insertEnQueue(phead, 2, 12);

    printfall(phead);

    phead = insertEnQueue(phead, 3, 3);

    printfall(phead);

    phead = insertEnQueue(phead, 4, 14);

    printfall(phead);

    phead = insertEnQueue(phead, 5, 5);

    printfall(phead);

    phead = insertEnQueue(phead, 6, 16);

    printfall(phead);

    phead = insertEnQueue(phead, 6, 0);

    printfall(phead);

    phead = insertEnQueue(phead, 7, 0);

    printfall(phead);

    phead = insertEnQueue(phead, 8, 0);

    printfall(phead);

    phead = insertEnQueue(phead, 9, 1);

    printfall(phead);

    phead = insertEnQueue(phead, 10, 0);

    printfall(phead);

    phead = insertEnQueue(phead, 11, 16);

    printfall(phead);

    phead = insertEnQueue(phead, 111, 19);

    printfall(phead);

 

    printf("打印排序后的链式队列:\n");

    printfall(phead);

 

 

    getchar();

    return 0;

}

 

 

 

目录
相关文章
|
SQL Java 数据库连接
利用mybatis对数据库中的数据进行增删改查操作~
利用mybatis对数据库中的数据进行增删改查操作~
231 0
|
12月前
|
人工智能 自然语言处理 安全
魔搭社区每周速递(12.08-12.14)
魔搭ModelScope本期社区进展:新增1599个模型,46个数据集,67个创新应用,8篇内容
374 7
魔搭社区每周速递(12.08-12.14)
|
机器学习/深度学习 IDE 开发工具
快速部署 Jupyter Notebook 社区版
Jupyter Notebook 是一个强大且灵活的工具,特别适用于数据科学、机器学习、教学和科研等领域。本文介绍如何使用阿里云计算巢服务快速部署Jupyter Notebook 社区版。
快速部署 Jupyter Notebook 社区版
|
网络架构
为什么udp流设置1316字节
为什么udp流设置1316字节
329 0
|
JavaScript 前端开发 IDE
TypeScript在大型前端项目中的价值与实践策略
【4月更文挑战第6天】本文探讨了TypeScript在大型前端项目中的价值和实践策略。 TypeScript通过静态类型检查、代码提示、接口与泛型提高代码质量和开发效率。它支持最新JS语法,拥有广泛社区支持。实践策略包括逐步迁移、制定类型规范、利用IDE、维护类型定义文件以及集成自动化测试。通过培训和知识分享,团队能更好地应用TypeScript,打造高质量、可维护的前端项目。
188 1
|
Java Linux Maven
设置 Maven 环境变量
配置Maven环境变量涉及Windows、Linux和Mac。在Windows上,需新建系统变量`MAVEN_HOME`,值为Maven安装路径,编辑`Path`添加`%MAVEN_HOME%\bin`。在Linux中,下载解压Maven后移动到`/usr/local/`,编辑`/etc/profile`添加`MAVEN_HOME`和`PATH`。在Mac上,类似Linux操作,下载解压后移动到`/usr/local/`,编辑`/etc/profile`。最后,通过`mvn -v`检查是否安装成功。
|
小程序 开发者
uniapp运行到开发者工具中
uniapp运行到开发者工具中
249 0
|
关系型数据库 Linux 块存储
CentOS7.5 手动部署ceph
1  环境配置 1.1  设备列表   功能 主机名 IP mon node1 192.168.1.10 mon node2 192.168.
9805 0
|
算法 计算机视觉
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
997 0
|
算法 NoSQL Java
限流艺术:Spring Boot接口限流的实用指南
限流艺术:Spring Boot接口限流的实用指南
2314 0
限流艺术:Spring Boot接口限流的实用指南