c语言数据结构高手请进,关于顺序栈的基本操作问题。

2024-11-09 06:10:24
推荐回答(3个)
回答1:

1. 想通过调用函数改变某个变量的值,必须传递这个变量的地址。也就是在InitStack中申请的内存并没有赋给Main中的s变量,会导致后面的访问出错。改为引用就可以了:
void InitStack(SqStack* &s)//初始化栈
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}

2.在"Pop(s,e);", 这个e并没有内存,导致"*e=s->data[s->top];"出错。
需要给它申请内存:
ElemType *e = (ElemType*)malloc(sizeof(ElemType));
最后"free(e);"一下。

回答2:

#include
#include
using namespace std;
#include
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} LinkStack;
void InitLinkStack (LinkStack * & s)
{
s=(LinkStack *)malloc(sizeof(LinkStack));
s->next=NULL;
}
int IsEmptyLinkStack (LinkStack *s)
{
return (s->next==NULL);
}
void PushLinkStack(LinkStack* &s , ElemType x)
{
LinkStack *p;
p=(LinkStack*)malloc(sizeof(LinkStack));
p->data=x;
p->next=s->next;
s->next=p;
}
int PopLinkStack (LinkStack* & s, ElemType &x)
{
LinkStack * p;
if(s->next==NULL)
return 0;
p=s->next;
x=p->data;
s->next=p->next;
free(p);
return 1;
}
int GetLinkStackTop (LinkStack* s, ElemType &x)
{
if(s->next==NULL)
return 0;
x=s->next->data;
cout< /*printf("%c",x);*/
return 1;
}
int main()
{
LinkStack *L;
char m[99];
int i=0;;
InitLinkStack(L);
gets(m);
while(m[i]!='#')
{
PushLinkStack(L,m[i]);
GetLinkStackTop(L,m[i]);
i++;
}
return 0;
}

回答3:

你这是敬告,没错呀,可以运行的