对于栈的操作很像顺序表操作方法,同样使用了泛型类和接口来实现,代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4![]()
5
namespace 栈和队列
6
{
7
class Program
8
{
9
public interface IStack<T>
10
{
11
//求栈的长度
12
int GetLength();
13
//判断是否为空
14
bool IsEmpty();
15
//判断是否已满
16
bool IsFull();
17
//清空操作
18
void Clear();
19
//入栈
20
void Push(T item);
21
//出栈
22
T Pop();
23
//取栈顶元素
24
T GetTop();
25![]()
26
}
27
public class SeqStack<T> : IStack<T>
28
{
29
//栈的容量
30
private int maxsize;
31
//存储栈中的数据
32
private T[] data;
33
//指定栈的栈顶
34
private int top;
35![]()
36
//索引器
37
public T this[int index]
38
{
39
get
40
{
41
return data[index];
42
}
43
set
44
{
45
data[index] = value;
46
}
47
}
48![]()
49
//容量属性
50
public int Maxsize
51
{
52
get
53
{
54
return maxsize;
55
}
56
set
57
{
58
maxsize = value;
59
}
60
}
61![]()
62
//栈顶属性
63
public int Top
64
{
65
get
66
{
67
return top;
68
}
69
}
70![]()
71
//构造器
72
public SeqStack(int size)
73
{
74
data = new T[size];
75
maxsize = size;
76
top = -1;
77
}
78![]()
79
//求栈的长度
80
public int GetLength()
81
{
82
return top + 1;
83
}
84![]()
85
//清空栈
86
public void Clear()
87
{
88
top = -1;
89
}
90![]()
91
//判断是否为空
92
public bool IsEmpty()
93
{
94
if (top == -1)
95
{
96
return true;
97
}
98
else
99
{
100
return false;
101
}
102
}
103![]()
104
//判断是否以满
105
public bool IsFull()
106
{
107
if (top == maxsize - 1)
108
{
109
return true;
110
}
111
else
112
{
113
return false;
114
}
115
}
116![]()
117
//入栈
118
public void Push(T item)
119
{
120
if (IsFull())
121
{
122
Console.WriteLine("栈满啦,要清空啦!");
123
return;
124
}
125
data[++top] = item;
126
}
127
//出栈
128
public T Pop()
129
{
130
T tmp=default(T);
131
if (IsEmpty())
132
{
133
Console.WriteLine("栈已空!");
134
return tmp;
135
}
136
tmp = data[top];
137
--top;
138
return tmp;
139
}
140
//获取栈顶数据元素
141
public T GetTop()
142
{
143
if (IsEmpty())
144
{
145
Console.WriteLine("表已空!");
146
return default(T);
147
}
148
return data[top];
149
}
150![]()
151
}
152![]()
153
static void Main(string[] args)
154
{
155
SeqStack<int> stack = new SeqStack<int>(10);
156
int[] str = new int[] {1,2,3,4,5,6,7,8,9};
157
for (int i = 0; i < str.Length; i++)
158
{
159
stack.Push(str[i]);
160
161
}
162
//显示出栈值
163
Console.WriteLine(stack.Pop());
164
//显示栈顶值
165
Console.WriteLine(stack.GetTop());
166
167![]()
168
}
169
}
170
}
171![]()
using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace 栈和队列6
{7
class Program8
{9
public interface IStack<T>10
{ 11
//求栈的长度12
int GetLength();13
//判断是否为空14
bool IsEmpty(); 15
//判断是否已满16
bool IsFull();17
//清空操作18
void Clear();19
//入栈20
void Push(T item);21
//出栈22
T Pop();23
//取栈顶元素24
T GetTop();25

26
}27
public class SeqStack<T> : IStack<T>28
{ 29
//栈的容量30
private int maxsize;31
//存储栈中的数据32
private T[] data;33
//指定栈的栈顶34
private int top;35

36
//索引器37
public T this[int index]38
{39
get40
{ 41
return data[index];42
}43
set44
{45
data[index] = value;46
}47
}48

49
//容量属性50
public int Maxsize51
{52
get53
{54
return maxsize;55
}56
set57
{58
maxsize = value;59
}60
}61

62
//栈顶属性63
public int Top64
{65
get66
{67
return top;68
}69
}70

71
//构造器72
public SeqStack(int size)73
{74
data = new T[size];75
maxsize = size;76
top = -1;77
}78

79
//求栈的长度80
public int GetLength()81
{82
return top + 1;83
}84

85
//清空栈86
public void Clear()87
{88
top = -1;89
}90

91
//判断是否为空92
public bool IsEmpty()93
{94
if (top == -1)95
{96
return true;97
}98
else99
{100
return false;101
}102
}103

104
//判断是否以满105
public bool IsFull()106
{107
if (top == maxsize - 1)108
{109
return true;110
}111
else112
{113
return false;114
}115
}116

117
//入栈118
public void Push(T item)119
{120
if (IsFull())121
{122
Console.WriteLine("栈满啦,要清空啦!");123
return;124
}125
data[++top] = item;126
}127
//出栈128
public T Pop()129
{ 130
T tmp=default(T);131
if (IsEmpty())132
{133
Console.WriteLine("栈已空!");134
return tmp;135
}136
tmp = data[top];137
--top;138
return tmp;139
}140
//获取栈顶数据元素141
public T GetTop()142
{143
if (IsEmpty())144
{145
Console.WriteLine("表已空!");146
return default(T);147
}148
return data[top];149
}150

151
}152

153
static void Main(string[] args)154
{155
SeqStack<int> stack = new SeqStack<int>(10);156
int[] str = new int[] {1,2,3,4,5,6,7,8,9};157
for (int i = 0; i < str.Length; i++)158
{159
stack.Push(str[i]);160
161
}162
//显示出栈值163
Console.WriteLine(stack.Pop());164
//显示栈顶值165
Console.WriteLine(stack.GetTop());166
167

168
}169
}170
}171



浙公网安备 33010602011771号