对于栈的操作很像顺序表操作方法,同样使用了泛型类和接口来实现,代码如下:
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 栈和队列
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
2using System.Collections.Generic;
3using System.Text;
4
5namespace 栈和队列
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