前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构 | 每日一练(94)

数据结构 | 每日一练(94)

作者头像
小林C语言
发布2019-06-21 21:11:08
4710
发布2019-06-21 21:11:08
举报

1. 对下面过程写出调用 P(3)的运行结果。

PROCEDURE p(w:integer);

BEGIN

IF w>0 THEN

BEGIN

p(w-1);

writeln(w);{输出 W}

p(w-1)

END;

END;

2. 用一个数组 S(设大小为 MAX)作为两个堆栈的共享空间。请说明共享方法,栈满/栈空的判断条件,并用 C 或 PASCAL 设计公用的入栈操作 push(i,x),其中 i 为 0 或 1,用于表示栈号,x 为入栈值。

正确答案

PS:||代表注释

1、运行结果为:1 2 1 3 1 2 1(注:运行结果是每行一个数,为节省篇幅,放到一行。)

2、两栈共享一向量空间(一维数组),栈底设在数组的两端,两栈顶相邻时为栈满。设共享数组为S[MAX],则一个栈顶指针为-1,另一个栈顶指针为MAX时,栈为空。用C写的入栈操作push(i,x)如下:

const MAX=共享栈可能达到的最大容量

typedef struct node

{elemtype s[MAX];

int top[2];

}anode;

anode ds;

int push( int i,elemtype x) //ds为容量有MAX个类型为elemtype的元素的一维数组,由两个栈共享其空间。i的值为0或1,x为类型为elemtype的元素。本算法将x压入栈中。如压栈成功,返回1;否则,返回0。

{ if(ds.top[1]-ds.top[0]==1){printf(“栈满\n”); return(0);}

switch(i)

{ case 0:ds.s[++ds.top[i]]=x; break;

case 1:ds.s[--ds.top[i]]=x;

return(1);}//入栈成功。

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档