当前位置:编程学习 > C/C++ >>

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

空队列:就是头指针和尾指针指向同一个空间。
插入元素,从队尾进,处理一下队尾,然后,若队列为空,注意进入第一个元素时的情况就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();
}

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,