Tauruser
Enjoy Every Day
posts - 34, comments - 95, trackbacks - 0, articles - 5
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
算法与数据结构实验(二)
Posted on 2006-03-22 12:18
Tauruser
阅读(703)
评论(2)
编辑
收藏
引用
所属分类:
算法与数据结构
数组空间组织与链表空间组织的堆栈实现
为了增强实现的堆栈通用性,用堆栈实现进行模板化。代码如下:
/**/
////////////
//stack.h
///////////////
/
////////////////////////////////////////////////
#ifndef stack_h_
#define
stack_h_
#include
<
iostream
>
using
namespace
std;
template
<
class
T
>
class
stack
{
public
:
virtual
void
push(
const
T
&
x)
=
0
;
virtual
void
pop()
=
0
;
virtual
T Top()
const
=
0
;
virtual
bool
IsEmpty()
const
=
0
;
virtual
bool
IsFull()
const
=
0
;
}
;
#endif
/**/
////////////
segstack.cpp
///////////////
/////////
数组组织代码
////////////////////////
#include
"
stack.h
"
template
<
class
T
>
class
SegStack:
public
stack
<
T
>
{
public
:
SegStack(
int
mSize);
~
SegStack();
bool
IsEmpty()
const
;
bool
IsFull()
const
;
void
push(
const
T
&
x);
void
pop();
T Top()
const
;
//
friend ostream& operator << (ostream& out,const SegStack<T>& seg);
template
<
class
T
>
friend ostream
&
operator
<<
(ostream
&
out
,
const
SegStack
<
T
>&
seg);
void
output(ostream
&
out
)
const
;
private
:
T
*
s;
int
maxSize;
int
top;
}
;
template
<
class
T
>
SegStack
<
T
>
::SegStack(
int
mSize):top(
-
1
)
{
maxSize
=
mSize;
s
=
new
T[maxSize];
}
template
<
class
T
>
SegStack
<
T
>
::
~
SegStack()
{
delete []s;
}
template
<
class
T
>
bool
SegStack
<
T
>
::IsFull()
const
{
return
(top
==
(maxSize
-
1
));
}
template
<
class
T
>
bool
SegStack
<
T
>
::IsEmpty()
const
{
return
(top
==-
1
);
}
template
<
class
T
>
void
SegStack
<
T
>
::push(
const
T
&
x)
{
if
(IsFull())
{
cout
<<
"
The stack is full
"
<<
endl;
}
else
{
s[
++
top]
=
x;
}
}
template
<
class
T
>
void
SegStack
<
T
>
::pop()
{
if
(IsEmpty())
{
cout
<<
"
The stack is empty
"
<<
endl;
}
else
{
top
--
;
}
}
template
<
class
T
>
T SegStack
<
T
>
::Top()
const
{
return
s[top];
}
template
<
class
T
>
void
SegStack
<
T
>
::output(ostream
&
out
)
const
{
out
<<
"
The stack list is:
"
;
for
(
int
i(
0
);i
<=
top;i
++
)
out
<<
"
"
<<
s[i];
//
out<<endl;
}
template
<
class
T
>
ostream
&
operator
<<
(ostream
&
out
,
const
SegStack
<
T
>&
seg)
{
out
<<
"
The stack list is:
"
;
for
(
int
i(
0
);i
<=
seg.top;i
++
)
out
<<
"
"
<<
seg.s[i];
//
out<<endl;
//
seg.output(out);
return
out
;
}
/**/
///////////////
linkstack.cpp
////////////
////////////
//链表实现
/////////////////////
//
#include
"
stack.h
"
template
<
class
T1
>
struct
Element
{
T1 content;
Element
*
next;
}
;
template
<
class
T1
>
class
LinkStack:
public
stack
<
T1
>
{
public
:
LinkStack();
~
LinkStack();
bool
IsEmpty()
const
;
bool
IsFull()
const
;
void
push(
const
T1
&
x);
void
pop();
T1 Top()
const
;
template
<
class
T
>
friend ostream
&
operator
<<
(ostream
&
out
,
const
LinkStack
<
T1
>&
linkstack);
void
output(ostream
&
out
)
const
;
private
:
Element
<
T1
>*
top;
}
;
template
<
class
T1
>
bool
LinkStack
<
T1
>
::IsEmpty()
const
{
if
(top
==
NULL)
return
true
;
else
return
false
;
}
template
<
class
T1
>
bool
LinkStack
<
T1
>
::IsFull()
const
{
return
false
;
}
template
<
class
T1
>
LinkStack
<
T1
>
::LinkStack():top(NULL)
{
}
template
<
class
T1
>
LinkStack
<
T1
>
::
~
LinkStack()
{
while
(top
!=
NULL)
{
Element
<
T1
>*
temp;
temp
=
top;
top
=
top
->
next;
delete temp;
}
}
template
<
class
T1
>
void
LinkStack
<
T1
>
::push(
const
T1
&
x)
{
Element
<
T1
>*
temp
=
new
Element
<
T1
>
;
temp
->
content
=
x;
temp
->
next
=
top;
top
=
temp;
}
template
<
class
T1
>
void
LinkStack
<
T1
>
::pop()
{
if
(top
!=
NULL)
{
Element
<
T1
>*
temp;
temp
=
top;
top
=
top
->
next;
delete temp;
}
}
template
<
class
T1
>
T1 LinkStack
<
T1
>
::Top()
const
{
return
top
->
content;
}
template
<
class
T1
>
ostream
&
operator
<<
(ostream
&
out
,
const
LinkStack
<
T1
>&
linkstack)
{
Element
<
T1
>*
temp;
temp
=
linkstack.top;
out
<<
"
The stack list is:
"
;
while
(temp
!=
NULL)
{
out
<<
temp
->
content
<<
'
'
;
temp
=
temp
->
next;
}
return
out
;
}
template
<
class
T1
>
void
LinkStack
<
T1
>
::output(ostream
&
out
)
const
{
Element
<
T1
>*
temp;
temp
=
top;
out
<<
"
The stack list is:
"
;
while
(temp
!=
NULL)
{
out
<<
temp
->
content
<<
'
'
;
temp
=
temp
->
next;
}
}
没有写注释,有空再补上吧。
Feedback
#
re: 算法与数据结构实验(二)
回复
更多评论
2006-03-22 17:33 by
任我行
template < class T > class stack
{
public :
virtual void push( const T & x) = 0 ;
virtual void pop() = 0 ; // 这样子void 类型有些不妥吧。
#
re: 算法与数据结构实验(二)
回复
更多评论
2006-03-22 18:15 by
Tauruser
嗯,你认为应该如何呢?
我知道有些stack结构直接用pop(),弹出并返回栈顶,但这个模板类已经有一个Top()函数可以做到这个,将pop()返回值设为void有什么不妥呢?
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
双链表模版类的实现
C风格字符串与标准库string类型性能对比
算法与数据结构实验(二)
为什么在VS2005重载输出运算符那么难?
我的算法与数据结构学习(三)
Josephus问题
算法与数据结构实验(一)
我的算法与数据结构学习(二)
我的算法与数据结构学习(一)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © Tauruser
日历
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
公告
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
(16)
MFC(2)
计算机图形学(2)
密码学
数学模型
数值计算(2)
算法与数据结构(9)
信息论(1)
随笔档案
(34)
2007年3月 (1)
2007年2月 (2)
2007年1月 (1)
2006年10月 (1)
2006年6月 (3)
2006年5月 (5)
2006年4月 (6)
2006年3月 (14)
2006年2月 (1)
文章分类
(5)
密码学
数学模型
数值计算
算法与数据结构(4)
网络(1)
信息论
文章档案
(5)
2006年4月 (1)
2006年3月 (4)
相册
文章贴图
收藏夹
(3)
我的收藏(3)
协议
流媒体
中国协议网
友情链接
Orlaa
最新随笔
1. CListCtrl For Beginners(转载)
2. 结构体对齐的具体含义(#pragma pack) (转载)
3. MFC ComboBox 使用方法(转载)
4. 05年写的直线裁剪算法
5. C# Coding时的注释格式(zz)
6. 查找字符串的哈希方法(zz)
7. 木马客户端与服务端通讯如何隐藏不被发现
8. Gauss消去法直接求解方程组(附例程)
9. 使用AsycnSocket类进行简单双机通讯
10. Romberg求积(例程)
搜索
积分与排名
积分 - 105017
排名 - 237
最新评论
1. re: 双链表模版类的实现
问下:关于查找(search)那部分,我有点小问题要问,就是你直接就靠默认的比较操作符来比较,而你所用的是模版,链表支持各种类型,那么是字符串类型的链表或自定义类型的呢,你该怎么办
--周晓荣
2. re: OnSize()加入处理函数后,DEBUG报告出错
评论内容较长,点击标题查看
--NULL
3. re: C风格字符串与标准库string类型性能对比
评论内容较长,点击标题查看
--Hzj_jie
4. re: 05年写的直线裁剪算法
你这个算法也太复杂了吧
--啊啊啊啊啊啊
5. re: C++ Primer Fourth Edition (download file)
i want english edition
--zhccc
阅读排行榜
1. MFC ComboBox 使用方法(转载)(18708)
2. 结构体对齐的具体含义(#pragma pack) (转载)(11390)
3. Tab Control控件使用的例子(zz)(8345)
4. VC++2005 比 VC++ 6.0 退步了?(7513)
5. MAC地址有合法不合法之分吗?(7457)
评论排行榜
1. C风格字符串与标准库string类型性能对比(20)
2. VC++2005 比 VC++ 6.0 退步了?(12)
3. OnSize()加入处理函数后,DEBUG报告出错(8)
4. 为什么在VS2005重载输出运算符那么难?(7)
5. Gauss消去法直接求解方程组(附例程)(7)