随笔 - 143  文章 - 0  评论 - 23  阅读 - 125万

链表队列

下面是源代码:

 

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

 

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

}

 

                                       

posted on   cbwcwy  阅读(467)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2012年3月 >
26 27 28 29 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示