栈顶指针指向不同位置的区别

操作/状态栈顶指针指向栈顶元素(top 指向实际元素)栈顶指针指向栈顶元素的下一个位置(top 指向空位置)
栈空条件top == -1top == 0
栈满条件top == MaxSize - 1top == MaxSize
初始化top = -1top = 0
入栈操作先 top++,再 data[top] = xdata[top] = x;然后 top++
出栈操作x = data[top];然后 top—top—;然后 x = data[top]
读栈顶元素x = data[top]x = data[top - 1]
栈空判定代码示例if(top == -1) stack emptyif(top == 0) stack empty
入栈代码示例data[++top] = x;data[top++] = x;
出栈代码示例x = data[top--];x = data[--top];
指针含义top 指向当前栈顶元素所在位置top 指向栈顶元素的下一个空位置
优缺点逻辑直观,top 直接指向栈顶元素,访问方便top 指向空位置,入栈时直接赋值,出栈时先移动指针,代码稍有不同

总结:

  • 当栈顶指针指向栈顶元素时,栈空时 top 为 -1,入栈时先将 top 加 1 再赋值,出栈时先取值再将 top 减 1
  • 当栈顶指针指向栈顶元素的下一个位置时,栈空时 top 为 0,入栈时先赋值再将 top 加 1,出栈时先将 top 减 1 再取值
  • 两种方式的核心都是通过 top 指针的移动来指示数据的存取位置,区别在于 top 指针指向的是栈顶元素还是栈顶元素的下一个空位置