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;
    }
  • 相关阅读:
    当教育成为一种商品
    怎样设置Solaris上网
    对象转为xml输出到页面,中文乱码问题
    Flex 深拷贝与浅拷贝笔记
    使用access数据库需要注意的问题
    根据数据库表结构生成xsd文件
    SendKeys.Send()输入中文
    VB6迁移到VB.NET的一些问题汇总
    技术文章转移完毕
    说说重复发明轮子的事儿
  • 原文地址:https://www.cnblogs.com/kbyd/p/3991802.html
Copyright © 2011-2022 走看看