zoukankan      html  css  js  c++  java
  • 链式存储队列

    #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;
    }

    关注公众号 海量干货等你
  • 相关阅读:
    c++ cout、cin、endl
    c++ namespace
    找到小镇的法官
    整数反转
    c++stack类的用法
    栈应用:最小栈(第二题)
    栈的压入、弹出序列(第一题)
    c++中vector类的用法
    Android 面试常问七道题
    传感器实现仿微信摇一摇功能
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734510.html
Copyright © 2011-2022 走看看