| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 310 人关注过本帖
标题:一个栈的问题
只看楼主 加入收藏
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
一个栈的问题
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20
typedef int SElemType;
typedef int Status;
typedef struct

 {
   SElemType *base;
   SElemType *top;
   int stacksize;

 }SqStack;

 

Status initStack(SqStack S)           

 {

 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

 if(!S.base) exit(ERROR);

 S.top=S.base;

 S.stacksize=STACK_INIT_SIZE;

 return OK;

 }


 void push_stack_sq(SqStack S,SElemType e)

 {
     if(S.top-S.base>=S.stacksize)
         {
         S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
          if(!S.base)    exit(ERROR);
         S.top=S.base+S.stacksize;
         S.stacksize+=STACKINCREMENT;
        }
     *S.top=e;
    S.top++;   

 }


 void print(SqStack S)

 {  SElemType *p;
     p=S.base;
    while(p<=S.top)
     {
     printf("%d ",*p);
     p++;
     }

 }


 int main()

 {

 SqStack S;

 initStack(S);                   

 push_stack_sq(S,5);

 push_stack_sq(S,4);

 push_stack_sq(S,3);

 print(S);

 }
为什么结果出不来?哪里出错了?
2012-03-21 13:22
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
收藏
得分:0 
自己顶下,谁能帮忙看看,谢谢啦!
2012-03-21 15:47
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20
typedef int SElemType;
typedef int Status;
typedef struct SqStack

 {
   SElemType *base;
   SElemType *top;
   int stacksize;

 }SqStack;


 SqStack S; 

 SElemType *p; 

Status initStack()

 {

 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

 if(!S.base) exit(ERROR);

 S.top=S.base;

 p=S.base;

 S.stacksize=STACK_INIT_SIZE;

 return OK;

 }


 SqStack push_stack_sq(SqStack S,SElemType e)

 {
     if(S.top-S.base>=S.stacksize)
         {
         S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
          if(!S.base)    exit(ERROR);
         S.top=S.base+S.stacksize;
         S.stacksize+=STACKINCREMENT;
        }
     *(S.top)=e;
    (S.top)++;   
     return(S);

 }


 void print(SqStack S)

 {  p=S.base; 
    while(p<=S.top)
     {
     printf("%d ",*p);
     p++;
     }

 }


 int main()

 {

 initStack();

 push_stack_sq(S,5);

 push_stack_sq(S,4);

 push_stack_sq(S,3);

 print(S);

 }
如果是设置全局变量能运行,但结果不是预期结果,这是为什么???
没人能回答一下吗???
2012-03-21 16:59
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
收藏
得分:0 
再顶一次
2012-03-21 18:59
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:20 
hehe,第一次不能运行,主要是没有明白实参中数据和地址的差别。
说得理论一点,你可以看看关于函数调用过程中,堆栈操作的一些资料。
Status initStack(SqStack S)
S是实参,不能在函数中带回数据,也就是程序中S永远为{0}。

使用全局变量,可以直接操作S,堆栈才真正建立,然而在后面操作过程中,又犯了和前面一样的错误,使用参数S;
另外,在print中,S.top是没有数值的,因此,while(p<S.top)
可以参考以下代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20
typedef int SElemType;
typedef int Status;
typedef struct SqStack
{
     SElemType *base;
     SElemType *top;
     int stacksize;
}SqStack;

SqStack S;
SElemType *p;

Status initStack()
{
     S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
     if(!S.base) exit(ERROR);
     S.top=S.base;
     p=S.base;
     S.stacksize=STACK_INIT_SIZE;
     return OK;
}

SqStack push_stack_sq(SElemType e)
{
     if(S.top-S.base>=S.stacksize)
     {
          S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
          if(!S.base)    exit(ERROR);
          S.top=S.base+S.stacksize;
          S.stacksize+=STACKINCREMENT;
     }
     *(S.top)=e;
     (S.top)++;   
     return(S);
}

void print()
{  p=S.base;
while(p<S.top)
{
     printf("%d ",*p);
     p++;
}
}

int main()
{
     initStack();
     push_stack_sq(5);
     push_stack_sq(4);
     push_stack_sq(3);
     print();
}

2012-03-21 19:11
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
收藏
得分:0 
回复 5楼 silent_world
明白了,非常感谢!
2012-03-21 19:34
快速回复:一个栈的问题
数据加载中...
 
   



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

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