近来小编学习数据结构,遇到以下一个问题:
#define MaxSize 100
ElementType S[MaxSize];
int top;
void Push(ElementType *S, int top, ElementType item)
{ if (top==MaxSize-1) {
printf(“堆栈满”); return;
}else {
S[++top] = item;
return;
}
}
上面这个堆栈的数据结构没有使用数组和top(栈顶指针)组成的结构指针,而直接在Push函数中传递 数组和top变量,这个实现正确么?
哈哈,小编一开始怎么看也看不出有什么不对,虽然知道这肯定是个坑~
这个实现当然不正确啦,实际情况是这样的:
void Push(ElementType *S, int top, ElementType item)
C是值传递。Push函数的形参int top是值传递,在方法内对top修改的影响只对函数内top变量有效,函数体之外的top变量没有变化。如要使用这种方法,可以使用指针,在参数表中定义int* top,将原top地址传递进函数。
你是不是也明白了呢?