• 链式存储队列


    #include <iostream>
    #include <assert.h>
    using namespace std;
    typedef struct node
    {
        int data;
        struct node *next;
    }NODE;
    typedef struct queue
    {
        NODE* head;
        NODE* tail;
    }QUEUE;
    QUEUE* create_queue()
    {
        QUEUE* queue =  new QUEUE;
        queue->head = NULL;
        queue->tail = NULL;
        return queue;
    }
    NODE* create_node(int data)
    {
        NODE* node = new NODE;
        node->data = data;
        node->next = NULL;
        return node;
    }
    void queue_push(QUEUE* queue,int data)
    {
        NODE* node = create_node(data);
        if(queue->tail == NULL)
        {
            queue->tail = node;
            queue->head = node;
        }
        else
        {
            queue->tail->next = node;
            queue->tail = node;
        }
    }
    NODE* destroy_node(NODE* node)
    {
        NODE* next = node->next;
        delete node;
        return next;
    }
    int queue_pop(QUEUE* queue)
    {
        if(queue->head == NULL)
        {
            assert(false);
        }
        int data = queue->head->data;
        queue->head =destroy_node(queue->head);
        if(queue->head == NULL)
        {
            queue->tail = NULL;
        }
        return data;
    }
    int queue_size (QUEUE* queue)
    {
        int size = 0;
        NODE* node = NULL;
        for(node=queue->head; node;node=node->next)
        {
            size++;
        }
        return size;
    }
    void clear(QUEUE* queue)
    {
        while(queue->head)
        {
            queue->head = destroy_node(queue->head);
        }
        queue->tail = NULL;
    }
    void destroy_queue(QUEUE* queue)
    {
        clear(queue);
        delete queue;
    }
    bool queue_empty(QUEUE* queue)
    {
        if( (queue->head==NULL) && (queue->tail==NULL))
        {
            return true;
        }
        return false;
    }
    
    int main()
    {
        QUEUE* queue = create_queue();
        cout<<"input number:  ";
        for(int i=0;i<10;i++)
        {
            queue_push(queue,i);
            cout<<i<<" ";
        }
        cout<<endl;
        //queue_pop(queue);  //
        cout<<"output number:";
        while(! queue_empty(queue))
        {
            cout<<queue_pop(queue)<<" ";
        }
        cout<<endl;
        destroy_queue(queue);
        return 0;
    }

    关注公众号 海量干货等你
  • 相关阅读:
    洛谷 P3389 【模板】高斯消元法
    洛谷 P2090 数字对
    树链剖分
    bzoj3784 树上的路径
    K Seq HihoCoder
    一些奇怪的注意事项
    洛谷 P3437 [POI2006]TET-Tetris 3D
    洛谷 P2048 [NOI2010]超级钢琴 || Fantasy
    JVM字节码指令
    java中什么是Bridge Method(桥接方法)
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734510.html
Copyright © 2020-2023  润新知