爱问知识人 爱问教育 医院库

新手C语言数据结构问题

首页

新手C语言数据结构问题

题目是:假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈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( p0> p1)
         Exit(OVERFLOW);
        If(i==0){
           se[ p0]=x;
           p0++;
        }
      Else if(i==1){ se[ p1]=x; p1++;}
     Else return ERRPR;
     Return OK;
}

在压栈的时候为什么使用的是数组表示形式?
 se[ p0]=x;
base和top0,top1都是指针,指向数组元素的吧?
如果这样是不是可以直接使用* p0=x;取元素就可以呢?

提交回答
好评回答
  • 2013-03-26 17:56:53
      从答案开头的结构体类型定义中可以看出:base是指针类型变量,存储动态申请来的数组的起始地址(base可以当作数组名使用);top0和top1也是指针类型变量(即栈0和栈1的栈顶指针),但在后面的压栈操作实现中,top0和top1却是当作整型变量使用的(top0存储栈0的栈顶元素所在数组元素的后面一个数组元素的下标,top1存储栈1的栈顶元素所在数组元素的前面一个数组元素的下标),所以答案有误。
      应该把开头的"SElemType *top0, *top1;"改为"int top0, top1;"。另外,压栈操作实现中倒数第4行" p1++;"要改为" p1--;"。
       补充说明: 如果top0和top1是指针类型变量,那么原压栈操作算法中第4-8行做适当改动: if (i == 0) { * p0 = x; p0++; } else if (i == 1) { * p1 = x; p1--; }。

    大***

    2013-03-26 17:56:53

其他答案

    2013-03-26 20:55:26
  • 用( p0> p1)语句判断溢出是错的,应该是对于i=0和1分别判断 p0==0和 p1==stacksize-1。

    四***

    2013-03-26 20:55:26

  • 2013-03-26 18:26:59
  • 谢谢小草的回答,如果top0和top1都是int,那么这个初始化
    Status InitStack(tws &S){
       se=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
      if(! se)exit(OVERFLOW);
       acksize = STACK_INIT_SIZE;
       p0= se;
       p1= se+ acksize-1;
      return OK;
    }
    是不是到倒数第三和倒数第二行需要这样修改
    top0 = 0;
    top1 =  acksize-1;

    u***

    2013-03-26 18:26:59

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):