码迷,mamicode.com
首页 > 其他好文 > 详细

队列之链表实现

时间:2014-09-25 01:44:37      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   div   sp   

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

 

队列之链表实现

标签:style   blog   color   io   os   ar   for   div   sp   

原文地址:http://www.cnblogs.com/kbyd/p/3991802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!