菜鸟请教c语言数据结构

umbrowst 2013-03-22 10:23:48
题目是:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈。
在答案中
定义双向栈
#define STACK_INIT_SIZE_100;
Typedef struct{
SElemType *base;
SElemType *top0,*top1;
Intstacksize;
}tws;

压栈:Status Push(tws &S,int I,SElemType x){
If(S.top0>S.top1)
Exit(OVERFLOW);
If(i==0){
S.base[S.top0]=x;
S.top0++;
}
Else if(i==1){S.base[S.top1]=x;S.top1++;}
Else return ERRPR;
Return OK;
}

请问在定义的时候top0和top1都是指针类型,
那么在压栈的时候为什么是S.base[S.top0]=x;而不是*S.top0=x;
...全文
206 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-03-27
  • 打赏
  • 举报
回复
 0 1 2 3 4 5 6 7 8 9
[][][][][][][][][][]
        ↑  ↑
        sp0 sp1
umbrowst 2013-03-26
  • 打赏
  • 举报
回复
umbrowst 2013-03-25
  • 打赏
  • 举报
回复
引用 楼主 umbrowst 的回复:
题目是:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈。 在答案中 定义双向栈 #define STACK_INIT_SIZ……
请问这个和栈顶还是栈顶元素有什么关系? 我只是想知道为什么要用S.base[S.top0]=x; 既然top是指向栈顶元素上面的,那么栈顶是空的,直接*S.top0=x;不行吗?
umbrowst 2013-03-25
  • 打赏
  • 举报
回复
typedef struct { int *base; int *top; int stacksize; }SqStack; int CreateStack(SqStack &S) /*建立顺序栈*/ { S.base=(int *)malloc(MaxSize *sizeof(int)); if(!S.base) exit(0); S.top=S.base; S.stacksize=MaxSize; printf("请输入顺序栈\n"); printf("请输入栈底元素\n"); scanf("%d",&x); printf("请输入其余栈元素\n"); while(x!=-1) { *S.top=x; scanf("%d",&x); S.top++; } S.top--; return OK; } 普通栈也是用*S.top=x;为什么上面的题目就不行?
leizh007 2013-03-22
  • 打赏
  • 举报
回复
引用 楼主 umbrowst 的回复:
题目是:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈。 在答案中 定义双向栈 #define STACK_INIT_SIZ……
你还是先把普通栈的东西搞清楚再说吧
leizh007 2013-03-22
  • 打赏
  • 举报
回复
栈顶指针指向的是栈顶,不是栈顶元素

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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