#include<iostream> using namespace std; template<typename E> class node { public: E data; node<E>*next; node(E it=0,node<E>*p=NULL) { data = it; next = p; } }; template<typename E> class Queue { private: node <E>*front; node <E>*rear; int size; public: Queue() { front = new node<E>; rear = front; size = 0; } void clear() { rear = front; while (front->next!= NULL) { node<E>*p = front->next; front->next = front->next->next; delete p; } size = 0; } ~Queue() { clear(); delete front; delete rear; } void enQueue(E it) { rear ->next= new node<E>(it); rear = rear->next; size++; } bool deQueue() { if (size == 0) { cout << "empty" << endl; return false; } else { cout << "元素是:" << front->next->data << endl; node<E>*p = front->next; front->next = front->next->next; delete p; size--; return true; } } bool tran() { if (size == 0) { cout << "empty" << endl; return false; } else { while (front->next != NULL) { cout << front->next->data << endl; front = front->next; } return true; } } };
这里有几个点我是当初实现的时候卡住的了:
1、clear的时候,我们现在的链式队列其实可以对比我们当初写的那个单链表,front=head,rear=tail,tail指向的是最后一个元素(有实际内涵)
我一开始想着,应该如何保留tail,因为我很怕误delete了它,后来我想到了直接tail=head,回到一开始的状态。
2、enQueue的时候我也想着,要不要引入一个curr,后来我发现并没有必要,因为我们的队列就是一直在末尾添加的。
很简单!
rear->next=new node<E>(it);
因为一开始,rear=head,所以我们的head也连接好了
然后rear=rear->next;
3、dequeue!
还是很容易犯错误!
这个代码是错误的!你来看看哪里错了~bool deQueue() { if (size == 0) { cout << "empty" << endl; return false; } else { cout << "元素是:" << head->next->data << endl; head->next = head->next->next; delete head->next; size--; return true; } }
链式队列!
最新推荐文章于 2024-03-11 22:33:08 发布