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;

    }

                                           

  • 相关阅读:
    浏览器 显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字。window.prompt()
    JS字符串转换为JSON对象的四种方法
    js中 json对象与json字符串相互转换的几种方式 $.parseJSON(jsonStr)json字符串转换为json对象
    C#变量命名规则(命名规范)
    C#中AppDomain.CurrentDomain.BaseDirectory(获取程序的基目录)及各种路径获取方法
    C# 的 Path.GetFileName、Path.GetExtension、Path.GetDirectoryName千一网络 http://www.itpow.com/
    js计算两个时间相差天数,获取时间的毫秒数之差
    C#将DataTable转化为List<T>
    https://www.cnblogs.com/sizhizhiyue/p/4820973.html asp.net后台导出excel的方法一:使用response导出excel
    .NET调用AS/400上的程序(.NET CALL AS/400 PGM)
  • 原文地址:https://www.cnblogs.com/iloveyoucc/p/2395963.html
Copyright © 2011-2022 走看看