64,648
社区成员
发帖
与我相关
我的任务
分享
//天啊,我太菜了,写得好烂,哎
//下面为模版类
#ifndef QUEUE_CLASS_H
#define QUEUE_CLASS_H
template<class T>
class Queue
{
public:
Queue();
~Queue();
Queue(const T &que);
Queue& operator=(const Queue &que);
void copy(Queue<T> &queue1, const Queue<T> &queue2);
void destroy();
int size();
int EnQueue(const T &a);
T next();
T DeQueue();
private:
int i;
T* head;
T* end;
};
template<class T>
Queue<T>::Queue()
{
head = new T();
head->next = NULL;
end = head;
}
template<class T>
int Queue<T>::size()
{
int size = 0;
T* p = head;
while ((p = p->next) != end)
++size;
return ++size;
}
template<class T>
int Queue<T>::EnQueue(const T &a)
{
T *tmp;
tmp = new T(a);
end->next = tmp;
end = tmp;
end->next = head->next;
return size() - 1;
}
template<class T>
T Queue<T>::DeQueue()
{
if (head->next == NULL)
{
return *head;
}
T *tmp = head->next;
head->next = tmp->next;
T t(*tmp);
free(tmp);
return t;
}
template<class T>
void Queue<T>::destroy()
{
T *p = head->next;
while (p != end)
{
head->next = p->next;
free(p);
p = head->next;
}
free(end);
free(head);
}
template<class T>
Queue<T>::~Queue()
{
destroy();
}
template<class T>
void Queue<T>::copy(Queue<T> &queue1, const Queue<T> &queue2)
{
queue1.head = new T;
queue1.head-> = NULL;
queue1.end = head;
T *p = queue2.head;
T *tmp;
while (p != queue2.end)
{
tmp = new T(*p);
queue1.end->next = tmp;
tmp->next = queue1.head->next;
queue1.end = queue1.head->next;
}
tmp = new T(*queue2.end);
queue1.end->next = tmp;
tmp->next = queue1.head->next;
queue1.end = tmp;
}
template<class T>
Queue<T>& Queue<T>::operator =(const Queue<T> &que)
{
destroy();
copy(*this, que);
}
template<class T>
Queue<T>::Queue(const T &que)
{
copy(*this, que);
}
template<class T>
T Queue<T>::next()
{
if (size() >= 2)
return *head->next;
else
return *head;
}
#endif
//主函数
#include <iostream>
#include "Queue.h"
struct People
{
int i;
struct People *next;
};
int main()
{
Queue<People> queue;
std::cout << "\t\t\t\t银行排队叫号系统算法" << std::endl;
for (int i = 1; i <= 10; ++i)
{
People p;
p.i = i;
std::cout << "你的ID为" << i << "你前面目前还有" << queue.EnQueue(p) << std::endl;
}
std::cout << "当前正在处理号码:" << queue.DeQueue().i << std::endl;
std::cout << "下一位ID:" << queue.next().i << "请做准备" << std::endl;
system("pause");
return 0;
}