zoukankan      html  css  js  c++  java
  • 队列之链表实现

    #include<iostream>
    using namespace std;
    struct LinkQueueNode
    {
         LinkQueueNode* nextIn;
         int value;
    };
    
    struct LinkQueue
    {
        LinkQueueNode* front;
        LinkQueueNode* rear;
        bool isEmpty;
        int cnt;
    };
     
    LinkQueue* createLinkQueue()
    {
        LinkQueueNode* head = (LinkQueueNode* )malloc(sizeof(LinkQueueNode));
        LinkQueue* link =(LinkQueue*)malloc(sizeof(LinkQueue));
        link->front=head;
        link->rear=head;
        link->isEmpty=true;
        link->cnt=0;
        return link;
    }
    void InQueue(LinkQueue* q, int value)
    {
        LinkQueueNode* newIn = (LinkQueueNode* )malloc(sizeof(LinkQueueNode));
        newIn->nextIn=NULL;
        newIn->value=value;
        q->rear->nextIn=newIn;
        q->rear=newIn;
        q->isEmpty=((++q->cnt)==0);
    }
    bool Dequeue(LinkQueue* q, int* value)
    {
        if(!q->isEmpty)
        {
            LinkQueueNode* tep = q->front->nextIn;
            *value = tep->value;
            q->front->nextIn=tep->nextIn;
            q->isEmpty=((--q->cnt)==0);
            if(q->isEmpty)
                q->rear=q->front;///当清空的时候,要重新设置rear
            delete tep;
            return 1;
        }
        return 0;
    }
    bool front(LinkQueue* q, int* value)
    {
        if(!q->isEmpty)
        {
            LinkQueueNode* tep = q->front->nextIn;
            *value = tep->value;
            return 1;
        }
        return 0;
    }
    void outPut(LinkQueue* q)
    {
        LinkQueueNode* p = q->front->nextIn;
        while(p!=NULL)
        {
            cout<<p->value<<" ";
            p=p->nextIn;
        }
        cout<<endl;
    }
    void clearLinkQueue(LinkQueue* q)
    {
        int x;
        while(!q->isEmpty)
        {
             Dequeue(q,&x);
             cout<<x<<" ";
        }
        cout<<endl;
    }
    void main()
    {
        int len=10;
        LinkQueue* q = createLinkQueue();
        int v;
        for(int i=0;i<len;i++)
        {
             v = rand() % 100;
             cout<<v<<" ";
             InQueue(q,v);
    
        }
        cout<<endl;
        outPut(q);
        clearLinkQueue(q);
    
        for(int i=0;i<len;i++)
        {
             v = rand() % 100;
             cout<<v<<" ";
             InQueue(q,v);
    
        }
        cout<<endl;
        outPut(q);
        
        Dequeue(q,&v);
        cout<<v<<endl;
        outPut(q);
    
        front(q,&v);
        cout<<v<<endl;
        outPut(q);
    
        Dequeue(q,&v);
        cout<<v<<endl;
        outPut(q);
    
        Dequeue(q,&v);
        cout<<v<<endl;
        outPut(q);
    
        for(int i=0;i<5;i++)
        {
             v = rand() % 100;
             cout<<v<<" ";
             InQueue(q,v);
    
        }
        cout<<endl;
        outPut(q);
        if(!front(q,&v))
            cout<<"fail"<<endl;
        else outPut(q);
    
        clearLinkQueue(q);
    
        if(!front(q,&v))
            cout<<"fail"<<endl;
        else outPut(q);
    
        if(!front(q,&v))
            cout<<"fail"<<endl;
        else outPut(q);
    
        cin>>len;
    }
  • 相关阅读:
    人类历史上最智慧的169条警世箴言(句句珠玑,发人深省)
    最负责任的回答
    成大事必须依靠的五种人
    一生的伤痕
    有谁愿意陪我一程
    惜缘
    那朵美丽的格桑花,你是否依然绽放?
    今生今世只等你
    成就一生的15条黄金法则
    遇到困难挫折也不要悲观:每个人生来就是冠军(转)
  • 原文地址:https://www.cnblogs.com/kbyd/p/3991802.html
Copyright © 2011-2022 走看看