• 创建队列 出队 入队 显示队列(链式)


    #include <stdlib.h>
     
    typedef  int datatype;
     
    /* 定义节点存储入队元素和指向下一节点的指针  */
    typedef struct node{
        datatype data;
        struct node *next;
    }NODE;
     
    /* 定义节点存放队尾和对首指针  */
    typedef struct poiner{
        NODE *front;
        NODE *rear;
    }Linknode;
     
    /* 创建队列以及初始化函数  */
    void created(Linknode *H);
     
    /* 入队函数  */
    void enqueue(Linknode *H, int data);
    -----------------------------------------------------------------------
     
     
    #include <stdio.h>
    #include "queue.h"
     
    /***********************************************************************
     * 队列:只允许在一端进行插入,而在另一端进行删除操作的线性表
     * FIFO(First In First Out)允许插入的一端为队尾 允许删除的一端为队头
     * 链式队列其实就是单链表只能尾进头出
     ***********************************************************************/ 
     
    /* 创建队列以及初始化函数  */
    void created(Linknode *H)
    {    
        /* 定义节点并初始化 */
        NODE *M;
        M = (NODE *)malloc(sizeof(NODE));
        if (M == NULL)
        {
            printf("创建队列中malloc失败 ");
            return;
        }
        M->next = NULL;
     
        /* 让队尾队首指向头节点 */
        H->front = M;
        H->rear = M;
     
        return;
    }
     
    /* 入队函数  */
    void enqueue(Linknode *H, int data)
    {
        NODE *P;
        P = (NODE *)malloc(sizeof(NODE));
        if (P == NULL)
        {
            printf("入队函数申请内存失败 ");
            return;
        }
     
        P->data = data;
        P->next = NULL;
     
        H->rear->next = P;/* 让新节点挂在队尾  */
        H->rear = P;/* 队尾指向P节点  */
        printf("%d入队成功 ",data);
        return;
    }
     
    /* 出队函数  */
    datatype dequeue(Linknode *H)
    {    
        NODE *M;
        int x;
        M = (NODE *)malloc(sizeof(NODE));
        if (M == NULL)
        {
            printf("出队函数malloc失败 ");
            return -1;
        }
     
        if (H->front == H->rear)
        {
            printf("队列为空 ");
            x = 0;
        }
        else
        {
            M = H->front->next;/* 保存第一个节点  */
            H->front->next = M->next;/* 指向出队元素后面的节点 */
            if (M->next == NULL)
            {
                H->rear = H->front;
            }
            x = M->data;
            free(M);
            M = NULL;
        }
        return x;
    }
     
    /* 显示队列中元素  */
    void display(Linknode H)
    {
        NODE *M;
        M = (NODE *)malloc(sizeof(NODE));
        M = H.front->next; /* 指向第一个数据元素节点 */
     
        while(M != NULL)
        {
            printf("data = %d ",M->data);
            M = M->next;/* 指向下一个节点 */
        }
        printf("显示结束 ");
        return;
    }
    ----------------------------------------------------------------------------------
     
     
    #include <stdio.h>
    #include "queue.h"
    int main(int argc, char *argv[])
    {
        int comand;
        Linknode *H;
        int num;
        int value;
        int i;
        H =(Linknode *)malloc(sizeof(Linknode));
        if (H == NULL)
        {
            printf("malloc failed ");
            return -1;
        }
        do{
            printf(" ");
            printf("        1 创建队列 ");
            printf("        2 向队列插入元素 ");
            printf("        3 从队列删除元素 ");
            printf("        4 显示队列中元素 ");
            printf("        5 退出 ");
            printf("------------------------------- ");
            printf("请输入对应操作的数字(1 2 3 4 5) ");
            scanf("%d", &comand);
            switch (comand)
            {
            case 1:
                        created(H);
                printf("请输入你要创建元素的个数: ");
                scanf("%d", &num);
                for (i = 1; i <= num; i++ )
                { 
                    scanf("%d",&value);
                    enqueue(H, value);
                }
     
                break;
            case 2:
                puts("输入你想要插入的元素: ");
                scanf("%d", &value);
                enqueue(H, value);
                break;
            case 3:
                printf("outqueue-data:%d ",dequeue(H));
                break;
            case 4:
                display(*H);
                break;
            case 5:
                printf("正在退出.... ");
                return 0;
            default:
                printf("请检查你的输入是否有误 ");
                return -1;
            }
     
        }while(1);
        return 0;
    }
    --------------------------------------------------------------------------------------
    linux@ubuntu:~/haitao/squeue_linklist_队列$ ./test 
     
            1 创建队列
            2 向队列插入元素
            3 从队列删除元素
            4 显示队列中元素
            5 退出
    -------------------------------
    请输入对应操作的数字(1 2 3 4 5)
    1
    请输入你要创建元素的个数:
    3
    1
    1入队成功
    2
    2入队成功
    3
    3入队成功
     
            1 创建队列
            2 向队列插入元素
            3 从队列删除元素
            4 显示队列中元素
            5 退出
    -------------------------------
    请输入对应操作的数字(1 2 3 4 5)
    3
    outqueue-data:1
     
            1 创建队列
            2 向队列插入元素
            3 从队列删除元素
            4 显示队列中元素
            5 退出
    -------------------------------
    请输入对应操作的数字(1 2 3 4 5)
    4
    data = 2
    data = 3
    显示结束
     
            1 创建队列
            2 向队列插入元素
            3 从队列删除元素
            4 显示队列中元素
            5 退出
    -------------------------------
    请输入对应操作的数字(1 2 3 4 5)
    5
    正在退出....
  • 相关阅读:
    RedisUtil
    CSS基础知识点笔记
    fdgfgfgfgf
    PerfMon Metrics Collector插件的Disks I/O使用总结
    Jmeter使用笔记之html报告扩展(一)
    Jmeter使用笔记之意料之外的
    Jmeter使用笔记之函数
    Jmeter使用笔记之组件的作用域
    css 初始化文件 全面
    vue-grid-layout 使用以及各项参数作用
  • 原文地址:https://www.cnblogs.com/acer-haitao/p/5710009.html
Copyright © 2020-2023  润新知