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

顺序栈的模块说明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#define STACK_INIT_SIZE  100         //存储空间初始分配量9 C& X& K$ G( C  G
#define    STACKINCREMENT    10           //存储空间分配增量  o/ P! F2 }, W5 L6 v' D
typedef struct{" U! t0 u% Q9 `5 T: m! U1 m
SElemType            *base             //在栈构造之前和销毁之后,base的值为NULL
$ u) H9 \' e- ^. [0 K6 [, bSElemType            *top        //栈顶指针3 m! j. p& @* h7 `
int          stacksize;               //当前已分配的存储空间,以元素为单位) h) O5 s4 a$ D& W# z2 _( S
}SqStack;
8 p9 D% W$ W# H& D! W9 V* Y//---------基本操作的函数原型说明-----------2 m. q% p; L( ?% u
Status InitStack(SqStack &S);  E' l* `5 t" B3 t
              //构造一个空栈S
2 @4 e! v$ X! I5 ~" c1 B2 wStatus DestroyStack(SqStack &S);
0 m/ z/ e# F0 v! r6 n              //销毁栈S,S将不存在
% @* O6 E  \! J# v& e, v1 D& f( F" v1 XStatus ClearStack(SqStack &S);
6 z, t% g: _* V              //把S置为空栈* Z9 b& d# H* z
Status      StackEmpty(SqStackS);1 d, _  E$ I! {, v% n8 U# K1 \
              //若栈S为空栈,则返回TRUE,否则返回FALSE0 f* F2 K$ |* d9 A+ r+ Q
Int StackLength(SqStack S);  |7 A- L2 g5 ~" U( U) ^5 P" v
              //返回栈的元素个数,即栈的长度
" x" U+ R4 C5 I- W8 \# ^9 vStatus GetTop(SqStack S,SElemType &e);1 S6 N! X, b  N0 b1 W; e7 I* Q7 H5 Z9 v
              //若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR
( q9 [6 t1 q# G( `Status      Push(SqStack&S,SElemType e);
* q- S4 J9 Z+ ?. e0 o. x; C              //插入元素e为新的栈顶元素
# w; i& ?2 X+ r7 h. u: v+ _Status      Pop(SqStack&S,SElemType &e);
9 f  G5 {$ c+ @) B5 l8 v              //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR/ Z, h) z! i0 i) l- O7 \! a' X
Status      StackTraverse(SqStackS,Status(*visit)());  ^0 K+ j: p! n5 E5 X/ W, j2 G
              //从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit()失败,则操作失败。
# k* d0 o8 }) `" Z$ o5 U//---------基本操作的算法描述(部分)-----------
  E* T) D  |" H/ A5 H, g% L& }% lStatus InitStack(SqStack &S){6 @6 y; J+ x! g- |/ a
//构造一个空栈S
/ j1 Y1 s, K1 g. A& ?( J0 rS.base=(SElemType * )malloc(STACK_INIT_SIZE* sizeof(SElemType));
3 W: J6 A, }) @if(!S.base)exit(OVERFLOW);             //存储分配失败
5 C1 e* o, \' L8 {# T& Q+ c  i7 _S.top=S.base;
& z  Z( v& l0 ^3 {* `S.stacksize=STACK_INIT_SIZE;/ R# h5 k6 G# F! `! }7 V: S) E1 o5 H
return OK;
5 D) J. j' A2 {8 ]! O" L}InitStack
# S  |0 I/ O2 G- y$ o! q7 m! C$ q+ IStatus GetTop(SqStack s,SElemType &e){
8 c2 r- }- \* ^& M6 G//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR
5 g8 j" l* p$ J. J- qif(S.top==S.base)return ERROR;
% c" P4 B6 K$ ^e=*(S.top-1);
- q( o! u! C6 [3 M4 Ereturn OK;
; F* M2 j; T. u% H8 D7 m, v# R}//GetTop( f& {( m2 R4 P3 c/ S4 K
Status Push(SqStack S,SElemType &e){9 }! M1 H4 e* X0 F3 v) r
//若栈不空,则用e的值返回S的栈顶元素,并返回OK,否则返回ERROR
5 ?6 _9 c7 P5 o4 |2 uif(S.top-S.base>=S.stacksize){//栈满,追加存储空间
; `% {! B. j+ F. X1 J' OS.base=(SElemType *)realloc(S.base,% J6 R" ^8 p6 L7 Z' w; L
                            (s.stacksize+STACKINCREMENT)* sizeof(SElemType));4 U: C& i3 X# a, f) X
if(!S.base)exit(OVERFLOW);//存储分配失败3 @. D4 G; _* f( W9 H( e' B# \: {4 ]. r
S.top=S.base+S.stacksize;. _( @, R2 L/ s' D: W/ E  M( @
S.stacksize+=STACKINCREMENT;
, h$ N, l: _/ D! l5 n}# f2 A% `6 n$ W
*S.top++=e;
2 i; W7 T  o+ }  Jreturn OK;6 Y+ {, f! r0 z6 F$ f0 U
}//push: f' {3 m  E- u: V5 u
Status Pop(SqStack &S,SElemType&e){
# d3 Z# T: W/ b( X. S( C% [//若栈不空,则删除S的栈顶元素,则e返回其值,并返回OK;否则返回ERROR1 b3 |* ?% a* r
if(S.top==S.base)return ERROR;
5 q  P3 F; p1 u# Xe=*--S.top;9 \% v! N$ D) i8 j2 O
return OK;; g' q0 T% X0 L2 d# E/ y: `7 ]
}//Pop

该用户从未签到

3#
发表于 2016-8-12 11:35 | 只看该作者
路过捧场,谢谢分享!2 c. I7 g2 O5 j3 a0 D

该用户从未签到

5#
发表于 2016-8-13 10:16 | 只看该作者
支持一下,很不错哦!
) |) W% F# j0 }- S3 ~; Z0 T# {

该用户从未签到

6#
发表于 2016-8-15 11:44 | 只看该作者
学习中,谢谢分享
  h& e, s  c* p! `/ C& S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-26 22:28 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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