队列也是一种特殊的线性表,只不过是一头进另一头出罢了。
下面是队列的基本操作。
/* queue.h */
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include <string.h>
using namespace std;
#define TYPE int
typedef struct _Node {
TYPE data;
struct _Node* next;
} Node, *Pnode;
class Queue {
private:
Pnode front;
Pnode rear;
public:
Queue();
~Queue();
bool InitQueue();
void DestroyQueue();
void ClearQueue();
bool QueueEmpty();
int QueueLength();
bool GetHead(TYPE&);
bool EnQueue(TYPE);
bool DeQueue(TYPE&);
void QueueTraverse();
};
#endif
/* queue.cpp */
#include "queue.h"
Queue::Queue() {
cout<<"Constructor"<<endl;
front = NULL;
rear = NULL;
}
Queue::~Queue() {
cout<<"Destructor"<<endl;
DestroyQueue();
}
bool Queue::InitQueue() {
Pnode p = new Node;
if (!p) {
cout<<"Init Queue fail"<<endl;
return false;
}
front = p;
rear = p;
return true;
}
void Queue::DestroyQueue() {
if (!rear) {
return;
}
while (front) {
Pnode p = front;
front = front->next;
delete p;
}
rear = NULL;
}
void Queue::ClearQueue() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return;
}
while (front != rear) {
Pnode p = front;
front = front->next;
delete p;
}
memset(front, 0, sizeof(Node));
}
bool Queue::QueueEmpty() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
return true;
}
return false;
}
int Queue::QueueLength() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return 0;
}
int n = 0;
Pnode p = front;
while (p != rear) {
n++;
p = p->next;
}
return n;
}
bool Queue::GetHead(TYPE& e) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
return false;
}
e = front->next->data;
return true;
}
bool Queue::EnQueue(TYPE data) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
Pnode p = new Node;
if (!p) {
cout<<"EnQueue fail"<<endl;
return false;
}
p->data = data;
rear->next = p;
rear = p;
return true;
}
bool Queue::DeQueue(TYPE& e) {
if (!rear) {
cout<<"Queue not exist"<<endl;
return false;
}
if (front == rear) {
cout<<"debug empty"<<endl;
return false;
}
e = front->next->data;
Pnode p = front->next;
front->next = front->next->next;
if (p == rear) {
rear = front;
}
delete p;
return true;
}
void Queue::QueueTraverse() {
if (!rear) {
cout<<"Queue not exist"<<endl;
return;
}
Pnode p = front->next;
while (p) {
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
分享到:
相关推荐
队列的顺序与链式存储结构,已在acm通过
第三章 栈和队列 顺序存储结构和链式存储结构
作业 第三章 栈和队列 顺序存储结构和链式存储结构
中国大学MOOC上浙大的《数据结构》课程队列顺序存储&链式存储实现的代码。包括队列创建、入队、出队。
此为C++编写的队列链式存储(带头结点)的源代码文件,可直接运行,可以使用支持C++的编译器打开,对于数据结构课程初学者可以起到指导作用。
队列的链式存储结构与操作.佟(1).exe
大连民族学院,计科125,你一定会非常满意的,下载吧
掌握队列的基本操作:插入、删除、查找在顺序或链式存储结构上的实现。
假设迷宫由m行n列构成,有一个入口和一个出口,入口坐标为(1,1),出口坐标为(m,n),试找出一条从入口通往出口的最短路径。设计算法并编程输出一条通过迷宫的最短路径或...要求:用栈和队列实现,不允许使用递归算法
数据结构 c语言实现 队列的链式存储 供初学者研究使用 仅供参考
使用链式存储的存储方式实现队列这一数据结构,初学者可以拿去学习与借鉴。
(2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。 3.2 实验要求: (1) 复习课本中有关栈和队列的知识; (2) 用C语言完成...
这是一个队列的链式存储结构c语言实现程序,实现数据的出入对,打印队列等操作
数据结构课本上的队列链式结构基本操作实现
设有一个可停放 N 辆汽车的狭长停车场 , 只有一个大门供车辆出入 。 车辆按到达先后顺序依次从最里面向大门口停放 。 如果已放满 N 辆车 , 再来的车辆只能在大门外的便道上等待 , 一旦有车辆从停车场离开排在便道...
通过链表实现了队列的链式存储,包括:创建一个队列、销毁一个队列、清空一个队列、向队列中插入一个元素、删除一个元素、返回队列元素个数、返回队头元素、返回队尾元素等操作。
队列的链式存储以及一些基本操作
为了充分利用缓冲区的空间,往往将缓冲区设计成链式循环队列的结构,并为循环队列结构的缓冲区设置一个队首指针和一个队尾指针。每输入一个字符到缓冲区中,就将尾指针后移,链入缓冲区的循环队列之中;每输出一个字...
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式...