| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1211 人关注过本帖
标题:求助:顺序栈的建立和插入元素出现问题
只看楼主 加入收藏
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:0 
受益了,哈哈。。

编程的道路上何其孤独!
2011-04-01 10:29
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
回复 8楼 寒风中的细雨
谢谢帮助~~
可是我这个程序出现错误不是由于你给我指出的那个错误,
是由于这行
printf("\nInput what to insert:");
字符太多了,我试过把字符缩短就可以正常
可是我不知道为什么不行?
跟我是在虚拟机下编译有关吗?

博观而约取
2011-04-04 10:57
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
#include"stdio.h"
#include"basic.h"
main()
{
  int i=1;
  ElemType x;
  SeqStack *S;
  InitStack(S);
  printf("Input elem%d:",i++);
 

void InitStack(SeqStack *S)
{
  S->base=(ElemType *)malloc(sizeof(ElemType)*StackSize);
  if(S->base==NULL)
    exit(1);
  S->top=S->base;
  S->stacksize=StackSize;
}

程序不用看多少就有一个很严重的错误  指针不分配内存就拿过来直接用  觉得不会有错吗?
这样的程序跑起来会报内存错误的  你的没有暴露出来 只能说是开始的一时“幸运”吧

但后来在用的时候就会以一种 莫名奇妙的错误呈现 这样子使得错误隐藏的跟深点 没有试过几次这样的子的遭遇 一下子是很难看出来的 因为报错误的地方可能根本没有错
2011-04-04 12:08
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
回复 13楼 寒风中的细雨
是我的想法错了,之前没有认真看,后来我去验证了~~
如果我是在main函数中给SeqStack *S;进行内存分配也是可以的了?
但是还有一个疑问
 S = (SeqStack *) malloc (sizeof(SeqStack));
 S->base = (ElemType *)malloc(sizeof(ElemType)*StackSize);
当给结构体指针变量分配内存的时候究竟是对什么分配内存?
而且既然执行 S->base = (ElemType *)malloc(sizeof(ElemType)*StackSize);
是不是意味着给base分配内存,但是接下来怎么没有给top分配内存,
而就可以直接执行S->top = S->base;?
谢谢指教~~

博观而约取
2011-04-04 18:51
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
如果我是在main函数中给SeqStack *S;进行内存分配也是可以的了?
    可以   只要是在自己使用之前分配了就可以 并没有限制 main中 还是其他的 过程当中  因为malloc出来的内存是在堆区  而非 栈区

当给结构体指针变量分配内存的时候究竟是对什么分配内存?
例如 像这样SeqStack *S;
定义了一个SeqStack 指针类型的变量    首先定义变量后 是会分配存储变量的内存 但是这时候的空间是为了存放指针的 而不会去分配指针所要指向的单元(SeqStack)
而这句 S = (SeqStack *) malloc (sizeof(SeqStack)); 就相当是实例化一样  成功后才可以去使用它。 来个很简单的解释:如果定义了一个整形变量 int i_var; 当然不是全局变量(因为全局默认初始化是0), 显然这时候i_var的值的内容是不确定的, 然后在来个输出 printf("\t%d\n", i_var); 这样子肯定是有问题的因为你没有对它赋值。

而且既然执行 S->base = (ElemType *)malloc(sizeof(ElemType)*StackSize);
是不是意味着给base分配内存,但是接下来怎么没有给top分配内存,
而就可以直接执行S->top = S->base;?
说白了 分配内存就要让指针不但有地方可指而且还要按照自己的要求去指 S->base = (ElemType *)malloc(sizeof(ElemType)*StackSize); 分配了一段内存让S->base指向开始位置 同样也可以让其他的指针指向这个位置 因为内存分配后只要不释放它总是在那的(当然程序还在跑)  S->top = S->base; 就是要这两个指针指向同一个位置  来实现运算目的的  来个简单的解释: 定义了两个整形变量 int i_var1, i_var2; 给第一个变量赋值为5 i_var1 = 5; 这时候难道不可以让地二个变量的值也为5吗  显然是可以做到的 i_var2 = i_var1; 结果i_var2同样也是5。  这里的5 你可以看做是地址{0x00000005}   int 可以看做是 ElemType * 。   



2011-04-05 09:38
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
回复 15楼 寒风中的细雨
今天终于想通了,谢谢帮助

博观而约取
2011-04-07 20:44
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 16楼 守望之殇
有收获就好
2011-04-08 06:51
ST默文
Rank: 1
来 自:青岛
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-10
收藏
得分:0 
我看了你的存储结构定义。是一个顺序存储的栈。在你的函数int GetTop(SeqStack S,ElemType *x)
{
  if(EmptyStack(S)==1)
    return -1;
  *x=*S.top-1;

  return 1;
}
中就有错误啊
*x=*(S.top-1);
下面的还没看完,今天电脑没电了。希望能帮到你。
2011-04-11 23:56
快速回复:求助:顺序栈的建立和插入元素出现问题
数据加载中...
 
   



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

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