| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1211 人关注过本帖
标题:求助:顺序栈的建立和插入元素出现问题
取消只看楼主 加入收藏
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求助:顺序栈的建立和插入元素出现问题
这是basic.h文件

#include"stdio.h"
#define StackSize 100

typedef int ElemType;
typedef struct
{
  ElemType *top;
  ElemType *base;
  int stacksize;
}SeqStack;

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

int EmptyStack(SeqStack S)
{
  if(S.top==S.base)
    return 1;
  else
    return -1;
}

int FullStack(SeqStack S)
{
  if(S.top-S.base==StackSize)
    return 1;
  return -1;
}

int InsertElem(SeqStack *S,ElemType x)
{
  if(FullStack(*S)==1)
    return -1;
  *(S->top++)=x;
  return 1;
}

int GetTop(SeqStack S,ElemType *x)
{
  if(EmptyStack(S)==1)
    return -1;
  x=S.top-1;
  return 1;
}

int DeleteTop(SeqStack *S,ElemType *x)
{
  if(EmptyStack(*S)==1)
    return -1;
  x=--S->top;
  return 1;
}

void PrintStack(SeqStack S)
{
  int i;
  ElemType *p;
  if(EmptyStack(S)==1)
    printf("The Stack is Empty!\n");
  else
    {
      printf("The Stack is:");
      for(p=S.base,i=0;i<S.top-S.base;i++,p++)
        printf("%d,",*p);
    }


下面是insert.c文件
#include"stdio.h"
#include"basic.h"
main()
{
  int i=1;
  ElemType x;
  SeqStack *S;
  InitStack(S);
  printf("Input elem%d:",i++);
  scanf("%d",&x);
  while(x!=0)
    {
      InsertElem(S,x);
      printf("Input elem%d:",i++);
      scanf("%d",&x);
    }
  PrintStack(*S);
  printf("Input what to insert:");
  scanf("%d",&x);
  if(x!=0)
    InsertElem(S,x);
  PrintStack(*S);
  getch();
}
为什么编译的时候没有反应,原先是可以的,后来加了这一段就不行了
printf("Input what to insert:");
  scanf("%d",&x);
  if(x!=0)
    InsertElem(S,x);
  PrintStack(*S);
搜索更多相关主题的帖子: 元素 
2011-03-31 21:41
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
是用数组实现的

博观而约取
2011-03-31 22:11
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
是有个调用函数
void InitStack(SeqStack *S)
{
  S->base=(ElemType *)malloc(sizeof(ElemType)*StackSize);
  if(S->base==NULL)
    exit(1);
  S->top=S->base;
  S->stacksize=StackSize;
}
然后在插入元素
int InsertElem(SeqStack *S,ElemType x)
{
  if(FullStack(*S)==1)
    return -1;
  *(S->top++)=x;
  return 1;
}

博观而约取
2011-03-31 22:15
守望之殇
Rank: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
回复 5楼 守望之殇
还是谢谢了
我只知道我的PrintStack写错了,没有符合栈的规律

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

博观而约取
2011-04-04 10:57
守望之殇
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: 1
来 自:福建福州
等 级:新手上路
帖 子:43
专家分:9
注 册:2010-12-2
收藏
得分:0 
回复 15楼 寒风中的细雨
今天终于想通了,谢谢帮助

博观而约取
2011-04-07 20:44
快速回复:求助:顺序栈的建立和插入元素出现问题
数据加载中...
 
   



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

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