
#include
using namespace std;
//双向循环链队
template
class node
{
public:
node() { data = NULL; next = nullptr; from = nullptr; }
node(T _data) { data = _data; next = nullptr; from = nullptr; }
T data;
node* next;
node* from;
};
template
class linkQueue
{
public:
linkQueue() { length = 0; head = new node; head->from = head; head->next = head; tail = head; }
~linkQueue()
{
for (int i = 0; i < length; i++)
{
node* temp = tail;
tail = tail->from;
delete temp;
}
delete head;
head = nullptr;
tail = nullptr;
length = 0;
}
void inPut(T data)
{
node* p = new node(data);
p->next = tail->next;
tail->next = p;
p->from = tail;
tail = p;
head->from = p;
length++;
}
void outPut(T& data)
{
if (length == 0) { cout << "队空!" << endl; return; }
node* temp = head->next;
node* _temp = temp->next;
data = temp->data;
head->next = _temp;
_temp->from = head;
delete temp;
length--;
}
void print()
{
if (length == 0) { cout << "队空!" << endl; return; }
//node* temp = head; //正序
//for (int i = 0; i < length*2; i++)
//{
// temp = temp->next;
// if (temp == head) { temp = temp->next; }//队列循环等待时需要跳过不需要使用的节点(头节点)
// cout << i + 1 << ": " << temp->data << endl;
//}
node* temp = tail; //逆序
for (int i = 0; i < length * 2; i++)
{
cout << i + 1 << ": " << temp->data << endl;
temp = temp->from;
if (temp == head) { temp = temp->from; }
}
}
void getHead(T& data)
{
if (length == 0) { cout << "队空!" << endl; return; }
data = head->next->data;
}
void remove()
{
if (length == 0) { cout << "队空!" << endl; return; }
int num = length;
for (int i = 0; i < num; i++)
{
node* temp = tail;
tail = tail->from;
delete temp;
length--;
}
}
private:
int length;
node* head;
node* tail;
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)