|
栈的介绍. b# F$ i& F6 {+ t3 H8 S . x% z% Z- M% k# @) l, c 栈(stack),是一种线性存储结构,它有以下几个特点:
8 \6 R* [* e' v 栈通常包括的三种操作:push、peek、pop。
q$ ~2 H1 a8 E 1. 栈的示意图 & O% _' V) p- H! Y$ T. f; {
栈中的数据依次是30→20→10。 2. 出栈
出栈前:栈顶元素是30。此时,栈中的元素依次是30→20→10。 ! a2 l( C2 p* y( M 出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是20→10。 3. 入栈
* E4 N# ?4 v K5 U& i2 f 入栈前:栈顶元素是20。此时,栈中的元素依次是20→10。 入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40→20→10。 + `4 h! N, g* U3 u1 i6 H 8 `0 C/ q% t4 `; z# l- {" ^+ v 栈的C实现% [4 }! F0 A- o1 @) w W1 E g7 T3 z( v1 E" y3 ? 1数组实现的栈,并且只能存储int数据( m9 }1 w- v2 J1 j7 ~1 x$ M 实现代码:
Y1 @2 P1 p/ d" z 运行结果:
结果说明:该示例中的栈,是通过"数组"来实现的! : O" k u6 h+ V% l/ }* R 由于代码中已经给出了详细了注释,这里就不再对函数进行说明了。仅对主函数main的逻辑进行简单介绍:
" z, U0 S( C& ~, ~& \4 P5 L' I# ] 2单向链表实现的栈,并且只能存储int数据实现代码: ; v7 X1 ~3 h% ~: [ K& r
5 R) t$ C9 N/ `) D, G+ K 代码说明:"运行结果" 以及 "主函数main的逻辑"都和"C语言实现一"的一样。不同的是,该示例中的栈是通过单向链表实现的。 : P; u3 Q2 y$ x- w) Z$ G 3双向链表实现的栈,并且只能存储int数据! _" O$ C2 P7 {2 r4 _/ ^: o, [ 实现代码: 4 a$ Z/ G& d. j$ L, E# J6 J, A2 t (1)双向链表的头文件(double_link.h)
(2)双向链表的实现文件double_link.c)
(3)双向链表的测试程序(dlink_stack.c)
* D" ?2 }& y4 ?, |0 I5 A8 A 代码说明:"运行结果" 以及 "主函数main的逻辑"都和前两个示例的一样。不同的是,该示例中的栈是通过双向链表实现的。 3 x: T1 y9 a/ g. ^ O/ {- K 实现代码: (1)双向链表的头文件(double_link.h)
% L, h& z6 o$ E! n0 D2 g (2)双向链表的实现文件(double_link.c) $ d7 I6 m6 q ~( r
0 a% D- j9 u; T (3)双向链表的测试程序(dlink_stack.c) 3 ?" I3 c+ \7 y" s
2 _4 p& }4 y0 d* p2 N" R' E$ s 运行结果:
# s$ Z& D7 d5 {! k 结果说明:该示例中的栈是通过双向链表实现的,并且能存储任意类型的数据。示例中是以结构体类型的数据进行演示的,由于代码中已经给出了详细的注释,这里就不再介绍了。 |
微信公众号
手机版