C++用数组和链表分别实现Queue

简介:

C++用数组和链表分别实现Queue

昨天写了《C++用数组和链表分别实现Stack》,今天就是《C++用数组和链表分别实现Queue》,

队列就是先来的先被处理掉,后来的就等,直到成为先来的,实现起来感觉和栈差不多。

模板好用的,功能强大,有些东东还是写成模板的好,废话昨天都说了,今天是不想说的,

博客园的哥们说我的博客不符合推荐到首页的要求,只好加几句废话。

复制代码
template < typename T,typename container >
class  queue 
{
public :
bool  empty()  const
{
return  len == 0 ;
}

void  checkEmpty()
{
if (empty())
{
throw   new  exception( " 队列中没有数据 " );

}

T
&  back()
{
checkEmpty();
return  cur -> val;
}

const  T &  back()  const
{
return  back();
}

void  pop()
{
checkEmpty();
if (head -> next == cur)
{
delete head
-> next;
head
-> next = NULL;
}
else
{
node
*  tmp = head -> next;
head
-> next = tmp -> next;
delete tmp;
}
-- len;
}

T
&  front()
{
checkEmpty();
return  head -> next -> val; 
}

const  T &  front()  const
{
return  front();
}

void  push( const  T &  val)
{
node 
* tmp = new  node(val); 
cur
-> next = tmp; 
cur
= tmp; 
++ len; 
}

queue()
{
initialize();
}

explicit  queue( const  container &  cont)

initialize();
vector 
< int > ::const_iterator iter = cont.begin();
while (iter != cont.end())
{
push(
* iter ++ );
}
}

~ queue()
{
node 
* tmp;
while (tmp != NULL)
{
tmp
= head;
head
= head -> next;
delete tmp;
tmp
= NULL;
}
delete cur;
}


int  size()
{
return  len;
}

protected :
typedef 
struct  node1
{
node1 
* next;
T val;
node1(T v):val(v),next(NULL){} 
}node;

private  :
int  len; 
node 
* head; 
node 
* cur; 
void  initialize()
{
head
= new  node( - 1 );
cur
= head;
len
= 0 ;

};
复制代码
复制代码

template
< typename T,typename container >
class  queue
{
public :
bool  empty()  const
{
return  head == rail;
}

void  checkEmpty()
{
if (empty())
{
throw   new  exception( " 队列中没有数据 " );

}

// 队尾元素
T &  back()
{
checkEmpty();
return  arr[rail - 1 ];
}

const  T &  back()  const
{
return  back();
}

// 出队
void  pop()
{
checkEmpty();
arr[head
++ ] = 0 ;
}

// 队头元素
T &  front()
{
checkEmpty();
return  arr[head];
}

const  T &  front()  const
{
return  front();
}

// 入队
void  push( const  T &  val)
{
if (rail >= capacity){
capacity
= (rail - head) * 2 ;
* tmp = new  T[capacity];
int  j = 0 ;
for ( int  i = head;i < rail;i ++ )
{
tmp[j
++ ] = arr[i];
}
delete arr;
arr
= tmp;
rail
= rail - head;
head
= 0 ;
}
arr[rail
++ ] = val;
}

queue()
{
initialize(
4 );
}

queue(
int  capacity)
{
initialize(capacity);
}

explicit  queue( const  container &  cont)

initialize(cont.size());
vector 
< int > ::const_iterator iter = cont.begin();
while (iter != cont.end())
{
push(
* iter ++ );
}
}

~ queue()
{
delete arr;
}

// 队列中元素个数
int  size()
{
return  rail - head;
}

protected :
typedef 
struct  node1
{
node1 
* next;
T val;
node1(T v):val(v),next(NULL){} 
}node;

private  :
int  capacity; 
int  head; // 对头元素的位置
int  rail; // 对尾元素的位置
int   * arr; 

void  initialize( int  cap)
{
capacity
= cap;
arr
= new   int [capacity];
head
= rail = 0 ;
}
};



复制代码

作者:陈太汉


本文转自啊汉博客园博客,原文链接:http://www.cnblogs.com/hlxs/archive/2011/07/12/2104386.html


目录
相关文章
|
11天前
|
设计模式 C++ 容器
c++中的Stack与Queue
c++中的Stack与Queue
|
1月前
|
C++ 容器
【c++丨STL】stack和queue的使用及模拟实现
本文介绍了STL中的两个重要容器适配器:栈(stack)和队列(queue)。容器适配器是在已有容器基础上添加新特性或功能的结构,如栈基于顺序表或链表限制操作实现。文章详细讲解了stack和queue的主要成员函数(empty、size、top/front/back、push/pop、swap),并提供了使用示例和模拟实现代码。通过这些内容,读者可以更好地理解这两种数据结构的工作原理及其实现方法。最后,作者鼓励读者点赞支持。 总结:本文深入浅出地讲解了STL中stack和queue的使用方法及其模拟实现,帮助读者掌握这两种容器适配器的特性和应用场景。
60 21
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
46 5
|
1月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
47 5
|
4月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
153 64
|
3月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
103 5
|
4月前
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
64 1
|
4月前
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
74 1
|
4月前
|
存储 算法 C语言
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(一)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
|
4月前
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
107 0