template <typename value_type>
class Queue { //the queue is a FIFO container.
struct QueueNode {
typedef QueueNode *QueueNodePointer; //the pointer of a queue node.
value_type data; //the data domain of the queue.
QueueNodePointer next; //the pointer domain of the queue.
} *FrontPointer, *RearPointer; //the front pointer and the rear pointer.
public:
Queue() { //initialize the queue
FrontPointer = RearPointer = new QueueNode; //both front pointer and rear pointer point the new node.
FrontPointer->next = NULL; //the pointer domain is NULL initially.
}
void push(const value_type &Val) { //push an element into the queue.
QueueNode *p = new QueueNode; p->data = Val; p->next = NULL;
RearPointer->next = p; RearPointer = p;
}
void pop() { //pop the front element out.
if (FrontPointer == RearPointer) exit(-1);
QueueNode *p = FrontPointer->next;
FrontPointer->next = p->next;
if (RearPointer == p) RearPointer = FrontPointer;
delete p;
}
value_type &front() { //return the reference of the front element.
if (FrontPointer == RearPointer) exit(-1);
return FrontPointer->next->data;
}
const value_type &front() const { //return the const reference of the front element.
if (FrontPointer == RearPointer) exit(-1);
return FrontPointer->next->data;
}
value_type &back() { //return the reference of the rear element.
if (FrontPointer == RearPointer) exit(-1);
return RearPointer->data;
}
const value_type &back() const { //return the const reference of the rear element.
if (FrontPointer == RearPointer) exit(-1);
return RearPointer->data;
}
bool empty() const { //return the situation of the queue[empty or not].
return (FrontPointer == RearPointer) ? true : false;
}
int size() const { //return the size of the queue.
QueueNode *p = FrontPointer; int count = 0;
while (p->next != NULL) {
p = p->next; ++count;
}
return count;
}
};
[C++]链队的实现
最新推荐文章于 2022-10-03 16:23:41 发布