Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cosmicing
Prj-Cpps
提交
02750cc2
P
Prj-Cpps
项目概览
cosmicing
/
Prj-Cpps
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Prj-Cpps
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
02750cc2
编写于
4月 23, 2021
作者:
cosmicing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
上传新文件
上级
9e3d0485
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
267 addition
and
0 deletion
+267
-0
01-Templet/12-ListTemplet/ListTemplet.cpp
01-Templet/12-ListTemplet/ListTemplet.cpp
+267
-0
未找到文件。
01-Templet/12-ListTemplet/ListTemplet.cpp
0 → 100644
浏览文件 @
02750cc2
#include <iostream>
template
<
class
T
>
class
Node
{
public:
Node
<
T
>
*
next
;
Node
<
T
>
*
prev
;
T
data
;
};
template
<
class
T
>
class
List
{
public:
List
();
//默认构造函数
List
(
const
List
&
ln
);
//拷贝构造函数
~
List
();
//析构函数
void
add
(
T
e
);
//向链表添加数据
void
ascSort
();
//升序排序
void
remove
(
T
index
);
//移除某个结点
T
find
(
int
index
);
//查找结点
bool
isEmpty
();
//判断是否为空
int
size
();
//链表长度
void
show
();
//显示链表
void
resShow
();
//链表反向显示
void
removeAll
();
//删除全部结点
private:
Node
<
T
>
*
head
;
Node
<
T
>
*
tail
;
int
length
;
};
//
//默认构造函数
template
<
typename
T
>
List
<
T
>::
List
()
{
head
=
new
Node
<
T
>
;
tail
=
new
Node
<
T
>
;
head
->
next
=
tail
;
head
->
prev
=
nullptr
;
tail
->
next
=
nullptr
;
tail
->
prev
=
head
;
length
=
0
;
}
//拷贝构造函数
template
<
typename
T
>
List
<
T
>::
List
(
const
List
&
ln
)
{
head
=
new
Node
<
T
>
;
head
->
prev
=
nullptr
;
tail
=
new
Node
<
T
>
;
head
->
next
=
tail
;
tail
->
prev
=
head
;
length
=
0
;
Node
<
T
>*
temp
=
ln
.
head
;
while
(
temp
->
next
!=
ln
.
tail
)
{
temp
=
temp
->
next
;
tail
->
data
=
temp
->
data
;
Node
<
T
>
*
p
=
new
Node
<
T
>
;
p
->
prev
=
tail
;
tail
->
next
=
p
;
tail
=
p
;
length
++
;
}
tail
->
next
=
nullptr
;
}
//向链表添加数据
template
<
typename
T
>
void
List
<
T
>::
add
(
T
e
)
{
Node
<
T
>*
temp
=
this
->
tail
;
tail
->
data
=
e
;
tail
->
next
=
new
Node
<
T
>
;
Node
<
T
>
*
p
=
tail
;
tail
=
tail
->
next
;
tail
->
prev
=
p
;
tail
->
next
=
nullptr
;
length
++
;
}
//查找结点
template
<
typename
T
>
T
List
<
T
>::
find
(
int
index
)
{
if
(
length
==
0
)
{
std
::
cout
<<
"List is empty"
;
return
NULL
;
}
if
(
index
>=
length
)
{
std
::
cout
<<
"Out of bounds"
;
return
NULL
;
}
int
x
=
0
;
T
data
;
Node
<
T
>
*
p
;
if
(
index
<
length
/
2
)
{
p
=
head
->
next
;
while
(
p
->
next
!=
nullptr
&&
x
++
!=
index
)
{
p
=
p
->
next
;
}
}
else
{
p
=
tail
->
prev
;
while
(
p
->
prev
!=
nullptr
&&
x
++
!=
index
)
{
p
=
p
->
prev
;
}
}
return
p
->
data
;
}
//删除结点
template
<
typename
T
>
void
List
<
T
>::
remove
(
T
index
)
{
if
(
length
==
0
)
{
std
::
cout
<<
"List is empty"
;
return
;
}
Node
<
T
>
*
p
=
head
;
while
(
p
->
next
!=
nullptr
)
{
p
=
p
->
next
;
if
(
p
->
data
==
index
)
{
Node
<
T
>
*
temp
=
p
->
prev
;
temp
->
next
=
p
->
next
;
p
->
next
->
prev
=
temp
;
delete
p
;
length
--
;
return
;
}
}
}
//删除所有结点
template
<
typename
T
>
void
List
<
T
>::
removeAll
()
{
if
(
length
==
0
)
{
return
;
}
Node
<
T
>
*
p
=
head
->
next
;
while
(
p
!=
tail
)
{
Node
<
T
>*
temp
=
p
;
p
=
p
->
next
;
delete
temp
;
}
head
->
next
=
tail
;
tail
->
prev
=
head
;
length
=
0
;
}
//升序排序
template
<
typename
T
>
void
List
<
T
>::
ascSort
()
{
if
(
length
<=
1
)
return
;
Node
<
T
>
*
p
=
head
->
next
;
for
(
int
i
=
0
;
i
<
length
-
1
;
i
++
)
{
Node
<
T
>
*
q
=
p
->
next
;
for
(
int
j
=
i
+
1
;
j
<
length
;
j
++
)
{
if
(
p
->
data
>
q
->
data
)
{
T
temp
=
q
->
data
;
q
->
data
=
p
->
data
;
p
->
data
=
temp
;
}
q
=
q
->
next
;
}
p
=
p
->
next
;
}
}
//判断是否为空
template
<
typename
T
>
bool
List
<
T
>::
isEmpty
()
{
if
(
length
==
0
)
{
return
true
;
}
else
{
return
false
;
}
}
//链表长度
template
<
typename
T
>
int
List
<
T
>::
size
()
{
return
length
;
}
//输出链表
template
<
typename
T
>
void
List
<
T
>::
show
()
{
if
(
length
==
0
)
{
std
::
cout
<<
"List is empty"
<<
std
::
endl
;
return
;
}
Node
<
T
>
*
p
=
head
->
next
;
while
(
p
!=
tail
)
{
std
::
cout
<<
p
->
data
<<
" "
;
p
=
p
->
next
;
}
std
::
cout
<<
std
::
endl
;
}
//反向输出链表
template
<
typename
T
>
void
List
<
T
>::
resShow
()
{
if
(
length
==
0
)
return
;
Node
<
T
>
*
p
=
tail
->
prev
;
while
(
p
!=
head
)
{
std
::
cout
<<
p
->
data
<<
" "
;
p
=
p
->
prev
;
}
std
::
cout
<<
std
::
endl
;
}
//析构函数
template
<
typename
T
>
List
<
T
>::~
List
()
{
if
(
length
==
0
)
{
delete
head
;
delete
tail
;
head
=
nullptr
;
tail
=
nullptr
;
return
;
}
while
(
head
->
next
!=
nullptr
)
{
Node
<
T
>
*
temp
=
head
;
head
=
head
->
next
;
delete
temp
;
}
delete
head
;
head
=
nullptr
;
}
int
main
()
{
List
<
float
>
ls1
;
ls1
.
add
(
1.1
);
ls1
.
add
(
0.1
);
ls1
.
add
(
6
);
ls1
.
add
(
3.3
);
List
<
float
>
ls2
(
ls1
);
ls2
.
resShow
();
std
::
cout
<<
ls2
.
size
()
<<
std
::
endl
;
std
::
cout
<<
ls2
.
find
(
00
)
<<
std
::
endl
;
ls2
.
remove
(
6
);
ls1
.
resShow
();
ls2
.
show
();
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录