空隊列:就是頭指針和尾指針指向同一個空間。
插入元素,從隊尾進,處理一下隊尾,然後,若隊列為空,注意進入第一個元素時的情況就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();
}