这样算不算越界?
top ->
----------
E
----------
D
----------
C
----------
B
----------
base -> A
----------
在数据结构的栈中,非空栈的栈顶指针始终在栈顶元素的下一位置上。
但这样,TOP现在已经指出了分配空间的外面,这样不算越界么?
指针可以乱指,只要不调用就可以?
[解决办法]
不访问就不越界,指针的值对错与否看你怎么用,而不在于他指向哪
[解决办法]
这是溢出,top 指向的内存是有效的(也就是可访问的),但不是你为栈分配的内存空间,所以访问(主要是写)该内存的结果未知。
判断满栈是用 top 的地址值而不是 top 指向的内存内容,所以不存在错误。
[解决办法]
是这样的,我明白楼主的意思,如果在这个操作中,你如果获取 *top 那么就会越界,这是数组操作的基本概念,对吧?
但是对于堆栈来说没有越界这个说法,那是因为 top 和 base 对于外部是不可见的,从外部 Pop/Push 堆栈数组的某个元素其实是相对于 top 的位置来做的,如果按照楼主上面的表示法,内部实现大概是这个样子:
ElementType Pop(int i)
{
return array[--top];
}
void Set(ElementType e)
{
return array[top++];
}
如果 top 指向最后一个元素,则实现可能是这样的:
ElementType Pop(int i)
{
return array[top--];
}
void Set(ElementType e)
{
return array[++top];
}
所以越界与否和 top 指向哪里没有关系,关键是看你如何实现