-
Notifications
You must be signed in to change notification settings - Fork 0
/
自制栈.cpp
101 lines (96 loc) · 1.95 KB
/
自制栈.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
using namespace std;
template <class T>
class LinkNode {
public:
T data; //数据域
LinkNode<T>* link; //指向后继指针的结点
LinkNode(const T& el, LinkNode<T>* ptr = 0)
{
data = el;
link = ptr;
}
};
template <class T>
class LinkStack {
public:
LinkStack()
{
top = NULL;
size = 0;
}
~LinkStack()
{
Clear();
}
void Clear()
{
while (top != NULL) {
LinkNode<T>* tmp = top;
top = top->link;
delete tmp;
}
size = 0;
}
/*
TODO:1.4-a. 入栈操作,将item入栈,并返回true
*/
bool Push(const T item)
{
LinkNode<T> *temp=new LinkNode<T>(item,top);
top=temp;
size++;
return true;
}
/*
TODO:1.4-b. 出栈操作,并判断栈是否为空,将栈顶元素赋值给item
返回值说明:出栈成功,返回true,否则返回false
注意:如果栈为空,则打印cout << "栈为空,不能执行出栈操作" << endl;并返回false
*/
bool Pop(T& item)
{
if(size==0){
cout << "栈为空,不能执行出栈操作" << endl;
return false;
}
item=top->data;
top=top->link;
size--;
return true;
}
/*
TODO:1.4-c. 读取栈顶元素,但不删除,判断栈是否为空。
如果栈为空,则输出打印cout << "栈为空,不能读取栈顶元素" << endl;并返回false,
否则,将栈顶元素获取并赋值给item, 返回true。
*/
bool Top(T& item)
{
if(size==0){
cout << "栈为空,不能读取栈顶元素" << endl;
return false;
}
item=top->data;
}
private:
LinkNode<T>* top; //指向链式栈栈顶的指针
int size; //栈中元素个数
};
int main()
{
LinkStack<int> ls;
int iNum, temp, temp1 = -1, temp2 = -1;
cin >> iNum;
for (int i = 0; i < iNum; i++) {
ls.Push(i * 10);
}
cout << "输入一个入栈数:";n
cin >> temp;
if (temp != 99999) {
ls.Push(temp);
}
ls.Pop(temp1);
cout << "出栈:" << temp1 << endl;
ls.Top(temp2);
cout << "读取栈顶元素:" << temp2 << endl;
return 0;
}