有序链式队列

简介:   编写头文件 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;

}

 

 

 

目录
相关文章
|
8月前
|
存储 算法 C语言
线性表,双向链表,静态链表,循环链表(约瑟夫环)(上)
线性表,双向链表,静态链表,循环链表(约瑟夫环)
94 5
顺序表应用5:有序顺序表归并
顺序表应用5:有序顺序表归并
|
3月前
|
存储
顺序存储之顺序表
这篇文章介绍了顺序表的创建、操作和顺序存储的实现,包括定义数据类型、构建顺序表结构、顺序表的创建、扩容、数据插入、删除、遍历和销毁。
45 0
|
4月前
|
存储 Java
java数据结构,线性表顺序存储(数组)的实现
文章介绍了Java中线性表顺序存储(数组)的实现。线性表是数据结构的一种,它使用数组来实现。文章详细描述了线性表的基本操作,如增加、查找、删除、修改元素,以及其他操作如遍历、清空、求长度等。同时,提供了完整的Java代码实现,包括MyList接口和MyLinearList实现类。通过main函数的测试代码,展示了如何使用这些方法操作线性表。
|
8月前
|
存储 编译器 C语言
数据结构——顺序队列与链式队列的实现-2
数据结构——顺序队列与链式队列的实现
数据结构——顺序队列与链式队列的实现-2
|
8月前
|
存储 C语言
数据结构——顺序队列与链式队列的实现-1
数据结构——顺序队列与链式队列的实现
数据结构——顺序队列与链式队列的实现-1
|
8月前
|
存储 C语言
线性表,双向链表,静态链表,循环链表(约瑟夫环)(下)
线性表,双向链表,静态链表,循环链表(约瑟夫环)
80 6
|
8月前
|
C++
数据结构(顺序队列 循环队列
数据结构(顺序队列 循环队列
37 0
|
存储 人工智能 DataX
线性表的顺序存储实现
线性表的顺序存储实现
|
存储 C++
线性表的顺序存储——顺序表
线性表的顺序存储——顺序表
184 2
线性表的顺序存储——顺序表

热门文章

最新文章