鏈式佇列的實現(c++)
阿新 • • 發佈:2019-01-27
佇列的特點是先進先出。
【linkqueue.h程式碼】
// linkqueue.h程式碼
#ifndef QUEUE_H
#define QUEUE_H
template <class T> class Queue;
template <class T>
class linknode
{
friend class Queue<T>;
private:
T data;
linknode<T> *next;
};
template <class T>
class Queue
{
public:
Queue() //利用建構函式初始化佇列
{
front=rear=0;
};
bool Isempty();
void Front();
void Rear();
void Push(T item);
void Pop();
private:
linknode<T> *front;
linknode<T> *rear;
};
//------判斷佇列是否為空---------
template <class T>
inline bool Queue<T>::Isempty()
{
return front==0;
}
//-------元素進佇列(隊尾插入)-------
template <class T>
void Queue<T>::Push(T item)
{
linknode<T> *p=new linknode<T>();
p->data=item;
p->next=0;
cout<<item<<"進隊"<<endl;
if(Isempty())
{
front=rear=p;
}
else
{
rear->next=p;
rear=p;
}
}
//------元素出列(隊首刪除)---------
template <class T>
void Queue<T>::Pop()
{
if(Isempty())
{
cout<<"佇列為空,不能出列"<<endl;
}
else
{
linknode<T> *p=front;
cout<<front->data<<"出隊"<<endl;
front=front->next;
delete p;
}
}
//------獲取隊首元素---------------
template <class T>
inline void Queue<T>::Front()
{
if(!Isempty())
{
cout<<"隊首元素為"<< front->data<<endl;
}
else
{
cout<< "佇列為空"<<endl;
}
}
//------獲取隊尾元素-------------
template <class T>
inline void Queue<T>::Rear()
{
if(!Isempty())
{
cout<<"隊尾元素為"<< rear->data<<endl;
}
else
{
cout<< "佇列為空"<<endl;
}
}
#endif
【主程式】
#include "linkqueue.h"
#include <iostream>
using namespace std;
int main()
{
Queue<int> q;
q.Push(10);
q.Push(20);
q.Push(30);
q.Push(40);
q.Front();
q.Rear();
q.Pop();
q.Pop();
q.Pop();
q.Pop();
system("pause");
return 0;
}