元素入栈时,会先将栈压入,top指针再向上加一。C语言如何实现呢,下面是入栈的代码片段:
typedef struct node
{
int * base;
int * top;
int stacksize;
}Sqstack;
void Push(Sqstack *S, int elem)//入栈
{
*S->top++ = elem; //元素先入栈,指针后加一
}
*S->top++ = elem,S本为指向node结构的一个指针,本来对普通结构体指针赋值或者使用用 S -> stacksize 语句就行,因为S本身存储的是该结构实例的首地址,->便可以以指针方式从S地址找到他的结构成员stacksize,但是这里为什么找结构成员top时前面加了*呢,我是这样理解的:
首先->并非是个二元字符,不应该同*比较优先级。如果认为他是个二元字符,优先级低于一元字符*,那么这里 *S -> top 就看成了 (*q) -> top,这语法便是错误的。前面博客所讲结构指针的成员赋值方式应该是 q -> stacksize = XX 或者 (*q).stacksize = XX。所以这里应该是 * (S -> top) ,其实就等价于 *top ,只不过由于top属于S结构体,所以这样来表示。其次这个 ++ 是后自增,所以先是 *top = elem,然后 *top 即 *(S -> top) 再 +1自增。
同理,出栈操作就应该是(top指针是指的栈顶元素头顶的NULL存储单元,所以要先自减,再获取栈顶元素出栈):
elem = *--S->top;//指针先减一,栈顶元素再出栈