| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 886 人关注过本帖
标题:那位前辈讲讲这是为什么??实在想不明白
只看楼主 加入收藏
enenen
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-7-6
结帖率:100%
收藏
 问题点数:0 回复次数:5 
那位前辈讲讲这是为什么??实在想不明白
#include <stdlib.h>
#include <stdio.h>

typedef char ElemType;
typedef int Status;
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE

typedef struct linknode
{
ElemType data;
struct linknode *next;
}LiStack;

void InitStack(LiStack *S)
{
                                      //S=(LiStack *)malloc(sizeof(LiStack));
S->next=NULL;
printf("Init successfully!\n");
}
void ClearStack(LiStack *S)
{
LiStack *p;
while(S->next!=NULL)
{
p=S;
S=S->next;
free(p);
}
free(S);
printf("OVER");
}
void StackLength(LiStack *S)
{
int i=0;
LiStack *q;
q=S;
while(q->next!=NULL)
{
q=q->next;
i++;
}
printf("The length is:%d\n",i);
}
void StackEmpty(LiStack *S)
{
if(S->next!=NULL)
printf("The stack is not empty!\n");
else
printf("The stack is empty!\n");
}
void Push(LiStack *S,ElemType e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(LiStack));
p->data=e;
p->next=S->next;
S->next=p;
printf("push %c successful!\n",e);
}
void Pop(LiStack *S,ElemType e)
{
LiStack *p;
if(S->next!=NULL)
{
p=S->next;
e=p->data;
printf("%c\n",e);
S=S->next;
}
}
void GetTop(LiStack *S,ElemType e)
{
if(S->next!=NULL)
e=S->next->data;
printf("The top elem is:%c\n",e);
}
void DispStack(LiStack *S)
{
LiStack *p;
p=S;
while(p->next!=NULL)
{
printf("\t%c\n",p->next->data);
p=p->next;
}
}
void main()
{
LiStack *S;
ElemType a='a',b='b',c='c',d='d',e='e';
S=(LiStack*)malloc(sizeof(LiStack));
InitStack(S);
StackEmpty(S);
Push(S,a);
Push(S,b);
Push(S,c);
Push(S,d);
Push(S,e);
StackEmpty(S);
StackLength(S);
DispStack(S);
StackEmpty(S);
ClearStack(S);
}
   我就搞不懂了,为什么红色部分 //S=(LiStack *)malloc(sizeof(LiStack));不注释就会出错???
  麻烦那位前辈讲讲????
搜索更多相关主题的帖子: include 
2011-07-09 20:20
Amethystarry
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-9-19
收藏
得分:0 
你在调用InitStack(函数前已经为S申请空间了吧?
S=(LiStack*)malloc(sizeof(LiStack));
 InitStack(S);
 
既然已经有了
为什么还要申请两次
2011-07-23 23:55
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
收藏
得分:0 
以下是引用Amethystarry在2011-7-23 23:55:52的发言:

你在调用InitStack(函数前已经为S申请空间了吧?
S=(LiStack*)malloc(sizeof(LiStack));
 InitStack(S);
  
既然已经有了
为什么还要申请两次
++楼上正解
2011-07-24 00:11
enenen
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-7-6
收藏
得分:0 
以下是引用enenen在2011-7-9 20:20:50的发言:

#include
#include

typedef char ElemType;
typedef int Status;
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE

typedef struct linknode
{
ElemType data;
struct linknode *next;
}LiStack;

void InitStack(LiStack *S)
{
                                      //S=(LiStack *)malloc(sizeof(LiStack));
S->next=NULL;
printf("Init successfully!\n");
}
void ClearStack(LiStack *S)
{
LiStack *p;
while(S->next!=NULL)
{
p=S;
S=S->next;
free(p);
}
free(S);
printf("OVER");
}
void StackLength(LiStack *S)
{
int i=0;
LiStack *q;
q=S;
while(q->next!=NULL)
{
q=q->next;
i++;
}
printf("The length is:%d\n",i);
}
void StackEmpty(LiStack *S)
{
if(S->next!=NULL)
printf("The stack is not empty!\n");
else
printf("The stack is empty!\n");
}
void Push(LiStack *S,ElemType e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(LiStack));
p->data=e;
p->next=S->next;
S->next=p;
printf("push %c successful!\n",e);
}
void Pop(LiStack *S,ElemType e)
{
LiStack *p;
if(S->next!=NULL)
{
p=S->next;
e=p->data;
printf("%c\n",e);
S=S->next;
}
}
void GetTop(LiStack *S,ElemType e)
{
if(S->next!=NULL)
e=S->next->data;
printf("The top elem is:%c\n",e);
}
void DispStack(LiStack *S)
{
LiStack *p;
p=S;
while(p->next!=NULL)
{
printf("\t%c\n",p->next->data);
p=p->next;
}
}
void main()
{
LiStack *S;
ElemType a='a',b='b',c='c',d='d',e='e';
S=(LiStack*)malloc(sizeof(LiStack));
InitStack(S);
StackEmpty(S);
Push(S,a);
Push(S,b);
Push(S,c);
Push(S,d);
Push(S,e);
StackEmpty(S);
StackLength(S);
DispStack(S);
StackEmpty(S);
ClearStack(S);
}
   我就搞不懂了,为什么红色部分 //S=(LiStack *)malloc(sizeof(LiStack));不注释就会出错???
  麻烦那位前辈讲讲????
   谢了
2011-07-24 15:12
enenen
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-7-6
收藏
得分:0 
回复 2楼 Amethystarry
谢了啊
2011-07-24 15:13
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
2#的是正解。。。
2011-09-04 15:00
快速回复:那位前辈讲讲这是为什么??实在想不明白
数据加载中...
 
   



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

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