#include "string"
#include "math.h"
#include "algorithm"
#include "iostream"
using namespace std;
template <class N>
class node
{
public:
node *next;
N date;
};
template <class T>
class CirQueue//队列类
{
public:
CirQueue();
~CirQueue();
bool Empty();//判断空队列
node<T>* pop();
bool EnQueue(T x);//添加一个元素
T DeQueue();//删除一个元素
void clearQueue();//初始化队列
void show();//show time
private:
node<T> *front;
node<T> *rear;
};
template <class T>
CirQueue<T>::CirQueue()
{
front = new node<T>;
front->next = rear;
rear = front;
rear->next = NULL;
}
template <class T>
node<T>* CirQueue<T>::pop()
{
if (!Empty())
{
node<T> *p = front->next;
front = front->next;
cout << "删除了" << p->date << endl;
return p;
}
else
{
cout << "这个队列是空的" << endl;
return front;
}
}
template <class T>
bool CirQueue<T>::Empty()
{
if (front == rear) return true;
else
{
//cerr << "这个队列不是空的" << endl;
return false;
}
}
template <class T>
bool CirQueue<T>::EnQueue(T x)
{
node<T> *p = new node<T>;
node<T> *p2;
p2 = front->next;
while (p2 != NULL)
{
if (x == p2->date)
{
cout << "集合内的元素是不允许重复滴,您输入的这个元素与之前的元素重复了,不能添加" << endl;
return 0;
}
p2 = p2->next;
}
p->date = x;
rear->next = p;
p->next = NULL;
rear = p;
cout << "插入了" << rear->date << endl;
return 1;
}
template <class T>
T CirQueue<T>::DeQueue()
{
if (!Empty())
{
front->next = (front->next)->next;
}
if (front->next == front)
{
rear = front;
}
}
template <class T>
void CirQueue<T>::clearQueue()
{
rear = front ;
front->next = front;
}
template <class T>
void CirQueue<T>::show()
{
node<T> *p;
if (Empty())
{
cout << " 这是个空集" << endl;
}
else
{
p = front->next;
while (p != NULL)
{
cout << p->date << " ";
p = p->next;
}
cout << endl;
}
}
template <class T>
node<T>* CirQueue<T>::find()//查找
{
T temp;
int panduan = 1;
node<T> *p2,*p;
p = front->next;
p2 = front;
while (panduan)
{
cout << "请输入元素" << endl;
cin >> temp;
while (p != NULL)
{
if (p->date == temp)
{
cout << "找着了" << p->date << endl;
return p2;
}
p2 = p;
p = p->next;
}
cout << "没找着" << temp << endl;
cout << "1,再输入一次 2,烦,不找了" << endl;
cin >> panduan;
if (panduan == 2) return NULL;
}
}
template <class T>
node<T>* CirQueue<T>::find(T temp)//查找2
{
node<T> *p;
p = front->next;
while (p != NULL)
{
if (p->date == temp)
{
cout << "找着了" << p->date << endl;
return p;
}
p = p->next;
}
cout << "没找着" << temp << endl;
return NULL;
}
感觉得自己一步一步慢慢实现一个STL,当做练手吧,也是学习数据结构一种好方法