您的位置:首页 > 编程语言 > C语言/C++

(10.19)C++实现链队列的基础操作

2013-06-13 15:40 274 查看
注:像书中一样,用到了头结点,作用就是像所有的单链表一样:插入删除首元素时不用对其进行特殊处理。 
还需要稍稍注意的东西就是要注意一下空间的分配,和队列为空的情况的处理。都不算难。

空队列:就是头指针和尾指针指向同一个空间。
插入元素,从队尾进,处理一下队尾,然后,若队列为空,注意进入第一个元素时的情况就ok,都很简单。
删除元素:就从队头删除,由于加入了头结点,所以比较方便对于队头的处理。





queue.h
#include<iostream>
using
namespace
std;

struct
list
{

   int data;  //队列中数据

   list *next;
 //表结构体中的链表,用于指向下一个元素
};

class
queue
{
private:

   list *front;

   list *rear;
public:

   queue()

   {

     
 front=rear=new list;  //初始化,一定要注意分配空间,队列为空,注意头结点和头指针的区别

     
 front->next=NULL;

   }

   void enqueue(int elem);  
 //插入元素为elem
的队尾远么

   int
 dequeue();
     
     
     
 //删除队头元素,并返回其值

   void traverse();  
     
     
   //遍历队列中的元素
};

queue.cpp

#include
"queue.h"

void
queue::enqueue(int elem)
{

   list *newlist=new list;

   newlist->data=elem;

   newlist->next=NULL;

   if(front==rear)//说明是空队列

   {

     
 front->next =
newlist;

     
 rear=newlist;

   }

   else

   {

     
 rear->next=newlist;

     
 rear=newlist;

   }
}

int
queue::dequeue()  //从队头出去
{

   int elem;//用于记录出队列的元素

   list *temp=new list;  //用于临时存储要出队列队头

   if(front==rear)return -1;

   else

   {

     
 temp
= front->next;

     
 elem=temp->data;

     
 front->next=temp->next;

   }

   delete temp;

   return elem;
}

void
queue::traverse()  
     //遍历整个队列
{

   list *temp;

   cout<<"从队头到队尾的元素分别为:"<<endl;

   for(temp=front->next;temp->next!=NULL;temp=temp->next)

   {

     
 cout<<temp->data<<"
";

   }

   cout<<rear->data<<endl;
}

main.cpp

#include"queue.h"

int
main()
{

   queue q;

   q.enqueue(1);

   q.enqueue(3);

   q.traverse();

   cout<<"删除的元素为:"<<endl;

   cout<<q.dequeue()<<endl;;

   q.traverse();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: