社区
C语言
帖子详情
数组 问题
_SNIPER_
2010-03-26 07:00:47
(1)假设用一个长度为50 的数组(数组元素的下标从0 到49 )作为栈的存储空间,栈底指针bottom 指
向栈底元素,栈顶指针top 指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有多少个
个元素?
这个题答案给的是19. 为什么不是20呀 希望大虾们帮忙解释一下 谢谢拉
...全文
249
14
打赏
收藏
数组 问题
(1)假设用一个长度为50 的数组(数组元素的下标从0 到49 )作为栈的存储空间,栈底指针bottom 指 向栈底元素,栈顶指针top 指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有多少个 个元素? 这个题答案给的是19. 为什么不是20呀 希望大虾们帮忙解释一下 谢谢拉
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hancker
2010-03-27
打赏
举报
回复
应该是19~TOP指针指向的第一个数据+1
栈空:buttom=top=-1
zhang2633320304
2010-03-27
打赏
举报
回复
这个好像是数学问题
楼主画画就可以明白
楼主是多减了 我以前也犯过同样的毛病
栈底和栈顶都有元素
如果49-30的话没有包含30这个位置的元素 即49个元素减去了30个元素
而30这个位置上也有元素 应该是49-29 才是楼主想要的结果
不知楼主明白了没
悠然红茶
2010-03-27
打赏
举报
回复
从LZ的描述中,大概可以知道这个堆栈是从高地址向下生长的。一开始bottom和top都是49,此时栈为空。压入一个元素后,top变为48,此时栈中有1个(49-48)元素。那么当top为30时,栈中应该有49-30=19个元素。
invail
2010-03-26
打赏
举报
回复
over xuexi
fengqiang6863
2010-03-26
打赏
举报
回复
20了
_SNIPER_
2010-03-26
打赏
举报
回复
[Quote=引用 2 楼 lhcwjy 的回复:]
你可以这样想一想:当bottom和top都等于0的时候表示是空栈,如果我们向栈中压入了一个元素,那么bottom=0,top=1;元素数=1-0=1;而不是1-0+1
[/Quote]
感觉这个比较合理呀 大虾们觉得呢
dick_china
2010-03-26
打赏
举报
回复
这个栈是你自己定义的还是类似于stl标准给的?
这个指针自然也可以自己定义下,没有人规定栈尾到底指向元素后一个还是当前那个
heis07w
2010-03-26
打赏
举报
回复
栈的定义没给清楚,空栈top是-1还是0?
shnxin
2010-03-26
打赏
举报
回复
其实对top的理解方式有两种,第一种方式的模拟代码如下,此方式下元素个数为19个:
int stack[50];
int top;
void init(){
top=49;
}
void push(int data){
if(!isFull()){
stack[top]=data;
--top;
}
}
int pop(){
if(!isEmpty()){
++top;
return stack[top];
}
}
bool isEmpty(){
return (top==49)?true:false;
}
bool isFull(){
return (top==-1)?true:false;
}
第二种理解方式的模拟代码如下,这种情况下元素个数为20:
int stack[50];
int top;
void init(){
top=50;
}
void push(int data){
if(!isFull()){
--top;
stack[top]=data;
}
}
int pop(){
if(!isEmpty()){
++top;
return stack[top-1];
}
}
bool isEmpty(){
return (top==50)?true:false;
}
bool isFull(){
return (top==0)?true:false;
}
cattycat
2010-03-26
打赏
举报
回复
如果栈底不存放元素的话,还浪费了一个空间。
BT六眼飞鱼
2010-03-26
打赏
举报
回复
我觉得是不是栈顶元素只是指向作用?和单链表一样 head一般不存数据的
cattycat
2010-03-26
打赏
举报
回复
感觉就是20。
白云飘飘飘
2010-03-26
打赏
举报
回复
你可以这样想一想:当bottom和top都等于0的时候表示是空栈,如果我们向栈中压入了一个元素,那么bottom=0,top=1;元素数=1-0=1;而不是1-0+1
昵称很不好取
2010-03-26
打赏
举报
回复
如果你的栈为空栈,那么栈顶指针指向下标0,栈顶指针所指的是下一个元素要插入的位置,意思是栈顶指针的所指的下标还没有值呐~~
微服务系列第六季-Java
数组
的使用
第六季主要是给大家介绍一下Java
数组
的使用,包括:
数组
的概念、
数组
的基本用法、处理
数组
、
数组
做为参数使用、多维
数组
的定义及初始化、二维
数组
求和、班级学生个人求和、班级学生个人成绩求最大值、班级学生个人...
最大子
数组
问题
(动态规划)
最大子
数组
问题
可以通过动态规划将时间复杂度做到O(N),也是之前的算法导论4.1-5
问题
动态规划
问题
上文的分治思想,实际上是根据
问题
性质将其分解为小规模
问题
,之后逐步求解小
问题
得出结果,再利用这些结果得出原
问题
的解。 动态规划实际上也是这种思想,当
问题
具备重叠子
问题
,最优子结构的性质时,往往可通过此法得出答案。 对于最大子
数组
问题
,采用dp
数组
解决 定义:dp[i] i 为
数组
索引,是为“状态”,dp[i]为以索引i为终点的
数组
的前i+1个值的最大子
数组
和 考虑dp[i] 与 dp[i-1]的关系,是否
最大子
数组
问题
的两种解法
所谓最大子
数组
就是连续的若干
数组
元素,如果其和是最大的,那么这个子
数组
就称为该
数组
的最大子
数组
。最大子
数组
是很多
问题
的抽象,比如购买股票。如果把相邻两天的股价之差作为
数组
元素,那么求在连续的某个时间段内买入股票的最佳时间和卖出股票的最佳时间就可以抽象为计算最大子
数组
的
问题
。下面分别介绍两种算法求解最大子
数组
问题
,算法思想均来自算法导论这本程序员的圣经。 分治法 分治法实现思路比较简单。如果把一...
算法导论-最大子
数组
问题
-线性时间复杂度算法分析与实现
之前写了最大子
数组
问题
的分治法,今天把这个
问题
的线性时间复杂度的算法写出来。 这个方法在算法导论最大子
数组
问题
的课后思考题里面提出来了,只是说的不够详细。 思考题如下:使用如下思想为最大子
数组
问题
设计一个非递归的,线性时间复杂度的算法。从
数组
左边界开始,由左至右处理,纪录到目前为止已经处理过的最大子
数组
。若已知A[1...j]的最大子
数组
,基于如下性质将解扩展为A[1...j+1]的最大子
数组
给定一个
数组
和数,求出所有和为给定数的情况(sum和子
数组
问题
)python3实现
sum和子
数组
问题
即是给定一个
数组
,求出所有该
数组
中和等于某个给定值的情况。 如有以下
数组
: s 1 2 3 4 5 如果给定一个数为10,那么在该
数组
中所有和为10的数字的组合为1+4+5, 2+3+5, 1+2+3+4。对于上述
问题
我们该如何求解呢? 这里我们可以用递归的方法进行实现。我们先用一个
数组
,记录当前值是否取了。如果取了,则该值对应的
数组
值为true,此 时...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章