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++ ,