栈
0.1
数据结构_第3章
linkStack.hpp
Go to the documentation of this file.
1
12
#ifndef __linkStackIncluded
13
#define __linkStackIncluded
14
15
#include "
Stack.hh
"
16
17
namespace
Stack
18
{
19
20
template
<
typename
T>
21
class
linkStack
:
public
Stack
<T>
22
{
23
private
:
24
struct
node
25
{
26
T
data
;
27
node
*
next
;
28
29
node
(
const
T &x = T(),
node
*
next
=
nullptr
)
30
:
data
(x),
next
(
next
) {}
31
node
(T &&x,
node
*
next
=
nullptr
)
32
:
data
(std::move(x)),
next
(
next
) {}
33
34
~node
() =
default
;
35
};
36
37
node
*
top_p
;
// 指向栈顶结点
38
39
public
:
40
linkStack
();
41
linkStack
(std::initializer_list<T> &&il);
// 支持列表初始化
42
virtual
bool
isEmpty
()
const
;
// 判栈空
43
virtual
void
push
(
const
T &elem);
// 进栈
44
virtual
void
push
(T &&elem);
// 进栈(move)
45
virtual
T
pop
();
// 出栈
46
virtual
T
top
()
const
;
// 读栈顶元素
47
virtual
~linkStack
();
48
};
49
50
template
<
class
T>
51
linkStack<T>::linkStack
()
52
: top_p(nullptr)
53
{
54
}
55
56
template
<
class
T>
57
linkStack<T>::linkStack
(std::initializer_list<T> &&il)
58
:
linkStack
()
59
{
60
for
(
auto
&&i : il)
61
push
(i);
62
}
63
64
template
<
class
T>
65
linkStack<T>::~linkStack
()
66
{
67
while
(top_p)
68
{
69
auto
tmp = top_p->next;
70
delete
top_p;
71
top_p = tmp;
72
}
73
}
74
75
template
<
class
T>
76
void
linkStack<T>::push
(
const
T &elem)
77
{
78
top_p =
new
node
(elem, top_p);
79
}
80
81
template
<
class
T>
82
void
linkStack<T>::push
(T &&elem)
83
{
84
top_p =
new
node
(std::move(elem), top_p);
85
}
86
87
template
<
class
T>
88
T
linkStack<T>::pop
()
89
{
90
T retVal = top_p->data;
91
92
auto
tmp = top_p->next;
93
delete
top_p;
94
top_p = tmp;
95
96
return
retVal;
97
}
98
99
template
<
class
T>
100
T
linkStack<T>::top
()
const
101
{
102
return
top_p->data;
103
}
104
105
template
<
class
T>
106
bool
linkStack<T>::isEmpty
()
const
107
{
108
return
!top_p;
109
}
110
111
}
// namespace Stack
112
#endif
Stack::linkStack::node::data
T data
Definition:
linkStack.hpp:26
Stack::linkStack::linkStack
linkStack()
Definition:
linkStack.hpp:51
Stack::linkStack::push
virtual void push(const T &elem)
Definition:
linkStack.hpp:76
Stack::linkStack
Definition:
linkStack.hpp:21
Stack::linkStack::top
virtual T top() const
Definition:
linkStack.hpp:100
Stack::linkStack::node::next
node * next
Definition:
linkStack.hpp:27
Stack::linkStack::node::node
node(T &&x, node *next=nullptr)
Definition:
linkStack.hpp:31
Stack::linkStack::pop
virtual T pop()
Definition:
linkStack.hpp:88
Stack::linkStack::top_p
node * top_p
Definition:
linkStack.hpp:37
Stack::linkStack::node
Definition:
linkStack.hpp:24
Stack::linkStack::node::~node
~node()=default
Stack::linkStack::~linkStack
virtual ~linkStack()
Definition:
linkStack.hpp:65
Stack::linkStack::node::node
node(const T &x=T(), node *next=nullptr)
Definition:
linkStack.hpp:29
Stack.hh
栈的抽象类
Stack::linkStack::isEmpty
virtual bool isEmpty() const
Definition:
linkStack.hpp:106
Stack
Definition:
linkStack.hpp:17
include
linkStack.hpp
Generated on Mon Jul 6 2020 21:04:43 for 栈 by
1.8.17