这两句代码是什么意思

电脑帮帮手 2009-03-19 10:27:36

下面是一个栈的删除元素的一个算法 红色部分代码我不是很懂,能不能给我详细点 把它分解一下 好让我能看明白
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define ATACKINCREMENT 10 // 存储空间分配增量
typedef struct
{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize;
} SqStack;
Status initstack(SqStack &s);
status gettop(SqStack s ,SElemType &e);//用e来返回栈顶元素
status pop (SqStack &S,SElemType &e); //删除s的栈顶元素

status intstack (SqStack &s)
{
s.base=(SElemType *) malloc (STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)exit (overlow);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return ok;
}
status gettop (SqStack s ,SElemType &e)
{
if (!s.top==s.base) return error;
e=*(s.top-1);
}
status pop (SqStack &S,SElemType &e)
{
if (s.top==s.base) return error;
e=*--s.top;
}
...全文
189 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
e=*(s.top-1); //s.top是栈顶指针,下移一块,并解引用获取其内容
}
status pop (SqStack &S,SElemType &e)
{
if (s.top==s.base) return error;
e=*--s.top; //栈顶指针自减,再解引用获取其内容,跟上面的功能一样
}
pengzhixi 2009-03-20
  • 打赏
  • 举报
回复
这两个都是移动栈顶指针。并对指针解引用取得栈顶元素的值
joneshong 2009-03-20
  • 打赏
  • 举报
回复
2楼正解
baidiaohappy 2009-03-20
  • 打赏
  • 举报
回复
移动栈顶指针,并获取栈顶元素
star_virgo 2009-03-20
  • 打赏
  • 举报
回复
s.top - (s.top-1) == sizeof(SElemType)
所以 s.top-1 和 --s.top 是可以实现指向前一个 SelemType 元素得
再对其解引用就成了
star_virgo 2009-03-20
  • 打赏
  • 举报
回复
.....
SElemType *top;
.....
e=*(s.top-1);
.....
e=*--s.top;
.....
top是SElemType类型得指针
所以

liusichen_0 2009-03-20
  • 打赏
  • 举报
回复
一楼正解,
status gettop (SqStack s ,SElemType &e)
{
if (!s.top==s.base) return error;
e=*(s.top-1); // 获取栈顶元素,但是栈顶位置不变
}
status pop (SqStack &S,SElemType &e)
{
if (s.top==s.base) return error;
e=*--s.top; // 执行出栈操作,栈顶指针移动一个位置
}

lizhizhe2000 2009-03-20
  • 打赏
  • 举报
回复
一看就是从数据结构书上的,很容易理解,我来接分
Jarrys 2009-03-20
  • 打赏
  • 举报
回复
s.top-1 //top指针不会改变,但得到top指针的下一位置的元素值。
--s.top //top指针会改变,同样得到top指针的下一位置的元素值
taoyanxu1989 2009-03-20
  • 打赏
  • 举报
回复
学习
蜥蜴枪王 2009-03-20
  • 打赏
  • 举报
回复
呵呵 学习了。。。
lzy340623339 2009-03-19
  • 打赏
  • 举报
回复
top指针总是指向栈顶单元上一个单元,e=*(s.top-1);就可以获得栈顶的元素值,而不修改top
e=*--s.top;//实际是e = *(--s.top);,这样就可以把栈顶元素弹出,逻辑上这个元素不再存在在栈内了
tangshuiling 2009-03-19
  • 打赏
  • 举报
回复

你标示的两个函数名字不同,意义相同
* (s.top-1)=*--s.top;
lzr4304061988012 2009-03-19
  • 打赏
  • 举报
回复

e=*(s.top-1);//top是指向栈顶之上的之上的指针,减去1解引用刚好是栈顶元素;

e=*--s.top; //前置--是先top减去1,再解引用,就是出栈后,并返回栈顶元素;

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧