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

    下面是源代码:

    -------------------------------------------------------------

    #include<iostream>

    using namespace std;

    #define OK 1

    #define ERROR 0

    typedef int Status;

    typedef struct QNode

    {

     int data;

     struct QNode *next;

    }QNode,*QNodePtr;

    /////////////////////////////////////////////////

    //LinkQueue类的声明

    //

    class LinkQueue

    {

    private:

     QNodePtr front;

     QNodePtr rear;

    public:

     LinkQueue();

     ~LinkQueue();

     Status ClearQueue();

     Status QueueEmpty();

     int    QueueLength();

     Status GetHead(int& e);

     Status EnQueue(int e);

     Status DeQueue(int& e);

     Status QueueTraverse(Status visit(QNode& e));

     Status PutQueue();

    };

    /////////////////////////////////////////////////

    //LinkQueue类的实现

    //

    LinkQueue::LinkQueue()

    {

     front=static_cast<QNodePtr>(new QNode);

     front->next=NULL;

     rear=front;

    }

    LinkQueue::~LinkQueue()

    {

     QNodePtr temp=front;

     while (front!=rear)

     {

      front=front->next;

      delete temp;

      temp=front;

     }

     delete temp;

     front=NULL;

     rear=NULL;

    }

    Status LinkQueue::ClearQueue()

    {

     QNodePtr pLink=front->next,temp=front->next;

     while (pLink!=rear)

     {

      pLink=pLink->next;

      delete temp;

      temp=pLink;

     }

     rear=front;

     delete temp;

     return OK;

    }

    Status LinkQueue::QueueEmpty()

    {

     return front==rear;

    }

    int LinkQueue::QueueLength()

    {

     int length=0;

     QNodePtr pLink=front->next;

     while (pLink!=rear->next)

     {

      pLink=pLink->next;

      length++;

     }

     return length;

    }

    Status LinkQueue::GetHead(int& e)

    {

     if (!QueueEmpty())

     {

      e=front->next->data;

      return OK;

     }

     else

     {

      return ERROR;

     }

    }

    Status LinkQueue::EnQueue(int e)

    {

     QNodePtr temp;

     temp=static_cast<QNodePtr>(new QNode);

     if (!temp)

     {

      exit(1);

     }

     temp->data=e;

     temp->next=NULL;

     rear->next=temp;

     rear=temp;

     return OK;

    }

    Status LinkQueue::DeQueue(int& e)

    {

     if (front==rear)

     {

      return ERROR;

     }

     QNodePtr temp=front->next;

     e=temp->data;

     front->next=temp->next;

     if (temp==rear)

     {

      rear=front;

     }

     delete temp;

     return OK;

    }

    Status LinkQueue::QueueTraverse(Status visit(QNode& e))

    {

     QNodePtr pLink=front->next;

     while (pLink!=rear->next)

     {

      if (!visit(*pLink))

      {

       return ERROR;

      }

      pLink=pLink->next;

     }

     return OK;

    }

    Status LinkQueue::PutQueue()

    {

     QNodePtr pLink=front->next;

     cout<<"Queue-->";

     while (pLink!=rear->next)

     {

      cout<<pLink->data<<"   ";

      pLink=pLink->next;

     }

     cout<<endl;

     return OK;

    }

    /////////////////////////////////////////////////

    //其他辅助函数

    //

    Status Add(QNode& e)

    {

     e.data++;

     return OK;

    }

    Status Sub(QNode& e)

    {

     e.data--;

     return OK;

    }

    /////////////////////////////////////////////////

    //主函数

    //

    int main()

    {

     int i,e;

     LinkQueue queue;

     queue.PutQueue();

     for (i=0;i<5;i++)

     {

      cout<<"Input the "<<i+1<<" elem:";

      cin>>e;

      queue.EnQueue(e);

      queue.PutQueue();

     }

     queue.QueueTraverse(Add);

     queue.PutQueue();

     queue.QueueTraverse(Sub);

     queue.PutQueue();

     while (!queue.QueueEmpty())

     {

      queue.DeQueue(e);

      cout<<"The element that have been dequeued is:"<<e<<endl;

      queue.PutQueue();

     }

     for (i=0;i<5;i++)

     {

      cout<<"Input the "<<i+1<<" elem:";

      cin>>e;

      queue.EnQueue(e);

      queue.PutQueue();

     }

     queue.ClearQueue();

     queue.PutQueue();

     return OK;

    }

                                           

  • 相关阅读:
    Xcode4.2 本地化 总结
    Android中后台线程如何与UI线程交互
    Android中后台线程如何与UI线程交互
    如何解决iOS内存错误
    如何解决iOS内存错误
    genymotion 和genymotion eclipse 插件安装 !
    genymotion 和genymotion eclipse 插件安装 !
    CoderForces 518C Anya and Smartphone (模拟)
    CodeForces 518B Tanya and Postcard (题意,水题)
    CodeForces 513A Game (水题,博弈)
  • 原文地址:https://www.cnblogs.com/iloveyoucc/p/2395963.html
Copyright © 2011-2022 走看看