找回密码
 注册
关于网站域名变更的通知
查看: 350|回复: 6
打印 上一主题 下一主题

顺序栈的模块说明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-8-11 12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
#define STACK_INIT_SIZE  100         //存储空间初始分配量
4 x! F5 b: D- n; q#define    STACKINCREMENT    10           //存储空间分配增量
: E% h& L, T: V# L# w$ mtypedef struct{
; U  z, d+ Z+ |4 @SElemType            *base             //在栈构造之前和销毁之后,base的值为NULL1 ~6 \' u! [( \) J
SElemType            *top        //栈顶指针
; o( G; l' ?& Y, x' V! D/ zint          stacksize;               //当前已分配的存储空间,以元素为单位
0 e* V& _; W8 K, h}SqStack;* c; u& {( c. T3 [" Q
//---------基本操作的函数原型说明-----------
3 h/ U' T) h0 r2 J. Y$ ^+ rStatus InitStack(SqStack &S);
9 j7 W; ?2 O! \0 F              //构造一个空栈S
+ V1 q( h0 O7 D. P3 Y# a: hStatus DestroyStack(SqStack &S);8 w" e9 ~1 @8 |1 Y& Y
              //销毁栈S,S将不存在
9 J  h* A) e, O+ i# jStatus ClearStack(SqStack &S);
9 b- D) B4 w2 \4 I$ M4 O; z              //把S置为空栈
# O; U7 H6 s1 T" KStatus      StackEmpty(SqStackS);0 p% ]. k! }. y7 C$ R0 U- e
              //若栈S为空栈,则返回TRUE,否则返回FALSE
8 c9 r( G3 h) l' D5 bInt StackLength(SqStack S);
3 t: A  J5 W& \0 O5 q4 u              //返回栈的元素个数,即栈的长度
) k. m* `4 a9 d4 wStatus GetTop(SqStack S,SElemType &e);
- M% L/ F- q. M2 \( q. v              //若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR* x3 c/ O4 ]1 G. \/ u
Status      Push(SqStack&S,SElemType e);# x) f6 {7 d, Y
              //插入元素e为新的栈顶元素. E7 o, I, S/ {/ S$ Q
Status      Pop(SqStack&S,SElemType &e);
4 t* n' ]% Q+ B; q% N. V3 V              //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR5 |" {! q5 n4 O7 z; b$ z
Status      StackTraverse(SqStackS,Status(*visit)());4 A! R. _" V) w$ y
              //从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit()失败,则操作失败。
- c8 F% m5 j" \# j( D& C//---------基本操作的算法描述(部分)-----------+ b& o) _# i2 P5 I* }" e
Status InitStack(SqStack &S){
$ P/ d! c  p8 p% e* v+ O//构造一个空栈S  B2 c! g; R% F0 o- e
S.base=(SElemType * )malloc(STACK_INIT_SIZE* sizeof(SElemType));; c5 V; Z' E( G5 E
if(!S.base)exit(OVERFLOW);             //存储分配失败
: `/ c6 {/ p: Y) @9 X( ES.top=S.base;, f3 Z# Y5 Z" C" p& k4 p
S.stacksize=STACK_INIT_SIZE;
; ~8 E+ P; B6 I. ]* y  hreturn OK;- {1 W8 Y$ U# j% S  K( S/ Q
}InitStack
/ j5 G( f# f# Y( P' QStatus GetTop(SqStack s,SElemType &e){: E3 m/ x8 p6 b& H% k
//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR) O5 O, V7 t5 h9 ~
if(S.top==S.base)return ERROR;4 j/ G  v) c7 p, G
e=*(S.top-1);
+ p) V5 G" p" U, q, `return OK;/ H+ x% U& \' W' @* q( D
}//GetTop
3 P9 r" m4 x# R9 N' A8 T, U" ?, U, MStatus Push(SqStack S,SElemType &e){
) z- j7 F5 c7 _) b; R//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR5 o6 l" k4 J$ n" d" \3 r  C( Q
if(S.top-S.base>=S.stacksize){//栈满,追加存储空间5 v" ]5 U: R6 D
S.base=(SElemType *)realloc(S.base,/ S) H, H& ?: T6 q+ |
                            (s.stacksize+STACKINCREMENT)* sizeof(SElemType));
3 c0 O, [* F; [* F  D; F! cif(!S.base)exit(OVERFLOW);//存储分配失败) m& y9 A4 Q- g) _" E5 u
S.top=S.base+S.stacksize;
  V/ F9 @# ^) H8 N, A, @S.stacksize+=STACKINCREMENT;/ r, m. j' t& G, |! p% }- n
}( d$ U9 b8 n* ]
*S.top++=e;7 }- }$ l+ K% c- d' M9 A4 G
return OK;" G2 W, `& L' k, P
}//push$ @$ Z1 o6 z' Y7 R. T/ u2 R
Status Pop(SqStack &S,SElemType&e){
! W7 G6 G: G; `$ W6 k//若栈不空,则删除S的栈顶元素,则e返回其值,并返回OK;否则返回ERROR
" K; r2 y1 a1 R' `, bif(S.top==S.base)return ERROR;
' a7 ]# C. k; {4 ne=*--S.top;
+ e7 g* y7 t+ h" `  e9 V  ~- E7 z  Vreturn OK;
- o" \5 i! c+ F}//Pop

该用户从未签到

3#
发表于 2016-8-12 11:35 | 只看该作者
路过捧场,谢谢分享!
2 T$ }# R) v9 s! S, a  w

该用户从未签到

5#
发表于 2016-8-13 10:16 | 只看该作者
支持一下,很不错哦!
' s3 {( f6 W! S6 g  \2 v6 |& `

该用户从未签到

6#
发表于 2016-8-15 11:44 | 只看该作者
学习中,谢谢分享6 H. V' [$ f! ^, ]4 r1 z' p- u, _

该用户从未签到

7#
发表于 2020-7-8 17:22 | 只看该作者
學習中,謝謝分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 02:00 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表