栈元素入栈出栈操作(C)

本文详细探讨了C语言中栈元素的入栈和出栈操作。在入栈时,通过*S->top++将元素压入栈,并解释了为何需要在成员访问操作符->前加上*。对于出栈操作,由于top指针指向栈顶元素的下一个位置,因此需要先自减,再获取栈顶元素进行出栈。文章深入解析了这些操作背后的逻辑和C语言的语法细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

元素入栈时,会先将栈压入,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;//指针先减一,栈顶元素再出栈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值