博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++用数组和链表分别实现Queue
阅读量:6111 次
发布时间:2019-06-21

本文共 2646 字,大约阅读时间需要 8 分钟。

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

昨天写了《》,今天就是《》,

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

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

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

ContractedBlock.gif
ExpandedBlockStart.gif
链表版
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
;
}
};
ContractedBlock.gif
ExpandedBlockStart.gif
数组版
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
;
T
*
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://kacka.baihongyu.com/

你可能感兴趣的文章
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>