C++中其实有stack的模板类。功能更为强大。
自己写一个栈能让我们对栈这种数据结构更加熟悉。这个栈有一个不足之处就是里面存放的元素类型只能为int。
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
|
#include <iostream> using namespace std; class Stack { private : struct Node { int data; Node *next; }; Node *head; Node *p; int length; public : Stack() { head = NULL; length = 0; } void push( int n) //入栈 { Node *q = new Node; q->data = n; if (head == NULL) { q->next = head; head = q; p = q; } else { q->next = p; p = q; } length ++; } int pop() //出栈并且将出栈的元素返回 { if (length <= 0) { abort (); } Node *q; int data; q = p; data = p->data; p = p->next; delete (q); length --; return data; } int size() //返回元素个数 { return length; } int top() //返回栈顶元素 { return p->data; } bool isEmpty() //判断栈是不是空的 { if (length == 0) { return true ; } else { return false ; } } void clear() //清空栈中的所有元素 { if (length > 0) { pop(); } } }; int main() { //以下为测试代码 Stack s; s.push(1); s.push(2); s.push(3); while (!s.isEmpty()) { cout<<s.pop()<<endl; } return 0; } |
对这段代码稍加修改,这个栈就能存放其他类型的元素
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
|
#include <iostream> using namespace std; template < class T> class Stack { private : struct Node { T data; Node *next; }; Node *head; Node *p; int length; public : Stack() { head = NULL; length = 0; } void push(T n) //入栈 { Node *q = new Node; q->data = n; if (head == NULL) { q->next = head; head = q; p = q; } else { q->next = p; p = q; } length ++; } T pop() //出栈并且将出栈的元素返回 { if (length <= 0) { abort (); } Node *q; int data; q = p; data = p->data; p = p->next; delete (q); length --; return data; } int size() //返回元素个数 { return length; } T top() //返回栈顶元素 { return p->data; } bool isEmpty() //判断栈是不是空的 { if (length == 0) { return true ; } else { return false ; } } void clear() //清空栈中的所有元素 { while (length > 0) { pop(); } } }; int main() { Stack< char > s; s.push( 'a' ); s.push( 'b' ); s.push( 'c' ); while (!s.isEmpty()) { cout<<s.pop()<<endl; } return 0; } |
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!