資料結構實驗–鏈式隊列(C++實現)

來源:互聯網
上載者:User

下面是原始碼:

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

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

 

 

//測試正確,未詳細調試~!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.