| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 736 人关注过本帖
标题:栈的问题
只看楼主 加入收藏
静源
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-8-25
收藏
 问题点数:0 回复次数:4 
栈的问题

这是两个栈共享一个空间
#define M 500
typedef stuct {
elemtype stuct[M];
int top[2];
}DuStack;
初始化栈。
voidInitDuStack(DuStack *s)
{
s->top[0]=0;
s->top[1]=M-1;
}

int DuPush(DuStack *s,int i,elemtype x)
{
if(i!=0&&i!=1)
{printf("error!");
return(0);
}
if(s->top[0]==s->top[1])
{printf("over flow!");
return(0);
}
s->stack[s->top[i]]=x;
return(1);
}
在这里面 (i!=0&&i!=1)的作用是干什么的,想不明白。


还有一个问题是:
单链表中判断栈空。
int StackEmpty(SqStack *s)
{
if(s->top==0)
return(1);
else
return(0);
}
因为栈顶指示器TOP指示栈顶元素在顺序栈中的位置,但是数组下标从0开始,所以TOP指向实际栈顶元素后面的一个空位置,所以这里s->top指的是实际栈顶元素呢还是实际栈顶元素后面的元素,如果是实际栈顶元素后面的元素,那可是空的呀。如果是实际栈顶元素那么看一下下面的:
取栈顶元素:
elemtypeGetTop(SqStack *s)
{
if(s->top==0) return(0);
else return(s->stack[--s-top]);

}
如果 s->top指的是实际栈顶元素,那么为什么还有s->stack[--s-top])呢,
我很迷茫呀。

搜索更多相关主题的帖子: stuct 空间 define elemtype 
2007-10-25 12:50
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
typedef stuct {
elemtype stuct[M];
int top[2];
}DuStack;

你打错了吧,结构体连名字也没有,elemtype stuct[M];也是。
(i!=0&&i!=1)
i是表示是要插入到栈1还是栈2,是通过top[0]top[1]来指示,所以只能是0和1取值。


判断空,是根据具体实现而言,两种都是可以的,你那个是指向实际元素的下一位置,也就是说初始化的时候top = 0
插入一个元素后top = 1

[此贴子已经被作者于2007-10-25 15:05:24编辑过]


Fight  to win  or  die...
2007-10-25 13:29
静源
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-8-25
收藏
得分:0 
回复:(aipb2007)typedef stuct {elemtype stuct[M]...
你那个是指向实际元素的下一位置,也就是说初始化的时候top = 0
插入一个元素后top = 1
你的这句话我还是不明白呀?
我还是在看看书。
非常感谢。
2007-10-25 14:41
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
int top = 0;
int queue[10];

void push(int i){
queue[top] = i;
++top;
}

void pop(){
--top;
}

bool empty(){
return top == 0;
}


结合起来看

Fight  to win  or  die...
2007-10-25 15:09
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
两个栈共享一个数组空间的问题,s.top[0]代表stack1的栈顶指示器,s.top[1]代表stack2的栈顶指示器。当有元素压入这个数组中时,top[0]和top[1]分别向中间移动,当s.top[0]=s.top[1]时,表示数组空间已分配完。
至于楼主的第二个问题,我觉得这跟top的初始值有关。
(1)当top的初始值被赋值为-1时,那么top的值始终指向当前栈顶元素的位置,当top=-1时表示栈空。
则进栈
s->stack[++top]=e;
出栈
e=s->stack[top--];
(2)楼主的那个top初值被赋值为0,那么它始终指向当前栈顶元素的下一个位置,当top值为0时,栈为空。
则进栈
s->stack[top++]=e;
出栈
e=s->stack[--top];


英者自知,雄者自胜
2007-10-26 20:19
快速回复:栈的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014582 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved