错误代码
#include <iostream>
using namespace std;
//重命名的内容:元素类型,节点指针,数据结构类型
typedef int ElementType;
typedef struct SNode *PtrToSNode;
struct SNode
{
ElementType Data;
PtrToSNode Next;
};
typedef PtrToSNode Stack;
int length(Stack s)
{
Stack ss=s;
int cnt=0;
while(ss->Next)
{
cnt++;
ss=ss->Next;
}
return cnt;
}
Stack MakeEmpty()
{
Stack s;
s=(Stack)malloc(sizeof(struct SNode));
s->Next=NULL;
return s;
}
void Push(Stack s,ElementType x)
{
Stack t;
//t是新的栈顶元素,s始终指向栈顶元素
t->Next=s->Next;
t->Data=x;
s->Next=t;
}
Stack Pop(Stack s,ElementType x)
{
Stack t=s->Next;;
//t是新的栈顶元素,s始终指向栈顶元素
s->Next=t->Next;
t->Next=NULL;
return t;
}
int main()
{
Stack s=MakeEmpty();
for(int i=1; i<=10; i++)
{
Push(s,i);
}
Stack ss=s;
while(ss->Next)
{
cout<<ss->Next->Data<<endl;
ss=ss->Next;
}
return 0;
}
运行结果
进入一个死循环
修改:
主要是pop里面为新指针申请了一块空间
#include <iostream>
using namespace std;
//重命名的内容:元素类型,节点指针,数据结构类型
typedef int ElementType;
typedef struct SNode *PtrToSNode;
struct SNode
{
ElementType Data;
PtrToSNode Next;
};
typedef PtrToSNode Stack;
int length(Stack s)
{
Stack ss=s;
int cnt=0;
while(ss->Next)
{
cnt++;
ss=ss->Next;
}
return cnt;
}
Stack MakeEmpty()
{
Stack s;
s=(Stack)malloc(sizeof(struct SNode));
s->Next=NULL;
return s;
}
void Push(Stack s,ElementType x)
{
Stack t;
t=(Stack)malloc(sizeof(struct SNode));
//t是新的栈顶元素,s始终指向栈顶元素
t->Next=s->Next;
t->Data=x;
s->Next=t;
}
Stack Pop(Stack s,ElementType x)
{
Stack t;
t=(Stack)malloc(sizeof(struct SNode));
//t是新的栈顶元素,s始终指向栈顶元素
s->Next=t->Next;
t->Next=NULL;
return t;
}
int main()
{
Stack s=MakeEmpty();
for(int i=1; i<=10; i++)
{
Push(s,i);
}
Stack ss=s;
while(ss->Next)
{
cout<<ss->Next->Data<<endl;
ss=ss->Next;
}
return 0;
}
为什么呢,把t=(Stack)malloc(sizeof(struct SNode));改成t=NULL就不行了。