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;

    }

                                           

  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/iloveyoucc/p/2395963.html
Copyright © 2011-2022 走看看