数据结构之队列_Queue
2015-11-23 19:51
597 查看
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#include<iostream>
template <class T>
struct Node
{
T data;
Node<T>* next;
Node(const T& item, Node<T>* nxt = NULL) :data(item), next(nxt){}
};
template <class T>
class Queue
{
private:
Node<T>* front;
Node<T>* rear;
int size;
public:
Queue<T>() : size(0), front(NULL), rear(NULL){}
~Queue<T>();
T Front();
void Pop();
void Clear();
void Delete(const T& item);
void Insert(const T& item);
Node<T>* Search(const T& item);
bool Empty(){ return front == NULL; }
int GetSize()const{ return size; }
void Show();
};
template <class T>
Queue<T>::~Queue()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
}
}
template <class T>
void Queue<T>::Insert(const T& item)
{
if (front == NULL)
{
front = rear = new Node<T>(item);
}
else
{
rear->next = new Node<T>(item);
rear = rear->next;
}
size++;
}
template <class T>
void Queue<T>::Pop()
{
if (Empty())
{
std::cout << "队列已空";
return;
}
size--;//肯定存在此节点
Node<T>* p = front;
front = front->next;
delete p;
}
template <class T>
T Queue<T>::Front()
{
return front->data;
}
template <class T>
Node<T>* Queue<T>::Search(const T& item)
{
Node<T>* p = front;
while (p != NULL)
{
if (p->data = item)
return p;
p = p->next;
}
return NULL;
}
template <class T>
void Queue<T>::Delete(const T& item)
{
Node<T>* p = Search(item);
if (p == NULL)
{
std::cout << "无此节点";
return;
}
size--;//肯定存在此节点
Node<T>* q = front;
if (p == q)
{
front = p->next;
delete p;
return;
}
while (q->next != p)
q = q->next;
q->next = p->next;
delete p;
}
template <class T>
void Queue<T>::Clear()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
}
front = rear = NULL;
}
template <class T>
void Queue<T>::Show()
{
Node<T>* p = head;
while (p != NULL)
{
std::cout << p->data << " ";
p = p->next;
}
}
#endif
#define QUEUE_H_INCLUDED
#include<iostream>
template <class T>
struct Node
{
T data;
Node<T>* next;
Node(const T& item, Node<T>* nxt = NULL) :data(item), next(nxt){}
};
template <class T>
class Queue
{
private:
Node<T>* front;
Node<T>* rear;
int size;
public:
Queue<T>() : size(0), front(NULL), rear(NULL){}
~Queue<T>();
T Front();
void Pop();
void Clear();
void Delete(const T& item);
void Insert(const T& item);
Node<T>* Search(const T& item);
bool Empty(){ return front == NULL; }
int GetSize()const{ return size; }
void Show();
};
template <class T>
Queue<T>::~Queue()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
}
}
template <class T>
void Queue<T>::Insert(const T& item)
{
if (front == NULL)
{
front = rear = new Node<T>(item);
}
else
{
rear->next = new Node<T>(item);
rear = rear->next;
}
size++;
}
template <class T>
void Queue<T>::Pop()
{
if (Empty())
{
std::cout << "队列已空";
return;
}
size--;//肯定存在此节点
Node<T>* p = front;
front = front->next;
delete p;
}
template <class T>
T Queue<T>::Front()
{
return front->data;
}
template <class T>
Node<T>* Queue<T>::Search(const T& item)
{
Node<T>* p = front;
while (p != NULL)
{
if (p->data = item)
return p;
p = p->next;
}
return NULL;
}
template <class T>
void Queue<T>::Delete(const T& item)
{
Node<T>* p = Search(item);
if (p == NULL)
{
std::cout << "无此节点";
return;
}
size--;//肯定存在此节点
Node<T>* q = front;
if (p == q)
{
front = p->next;
delete p;
return;
}
while (q->next != p)
q = q->next;
q->next = p->next;
delete p;
}
template <class T>
void Queue<T>::Clear()
{
Node<T>* p = front;
while (p != NULL)
{
front = p->next;
delete p;
p=front;
}
front = rear = NULL;
}
template <class T>
void Queue<T>::Show()
{
Node<T>* p = head;
while (p != NULL)
{
std::cout << p->data << " ";
p = p->next;
}
}
#endif
相关文章推荐
- 数据结构之链表_list
- 第九周 数据结构实现项目--数组和广义表【项目2 - 对称矩阵压缩存储的实现与应用】
- 学习笔记 BIT(树状数组)
- 浅谈数据结构
- Redis数据结构与对象
- 第十一周--数据结构--用二叉树求解代数表达式
- 数据结构(全)
- 项目2 -- 最小生成树的克鲁斯卡尔算法
- *第十三周*数据结构实践项目二【验证Kruskal算法】
- 第十一周--数据结构--哈夫曼编码的算法验证
- 项目5 -- 拓扑排序算法的实现
- 数据结构基础6.1:图的表示方法
- java中的各个数据结构区别
- 项目4 -- 每对顶点之间的最短路径
- 数据结构实践——操作用邻接表存储的图
- 第十三周 项目1 最小生成树的普里姆算法
- *第十三周*数据结构实践项目一【验证Prim算法】
- 第九周 数据结构实践——猴子选大王(数组版) 【项目 - 猴子选大王(数组版)】
- 数据结构实践—— 图基本算法库
- 数据结构—散列表(Hash table,也叫哈希表)