为什么链栈长度出来为0
#include
#include
typedef int ElemType;
typedef struct liStackNode
{
ElemType data;
struct liStackNode *next;
} liStack;
liStack * InitStack(liStack *Q){
Q=(liStack*)malloc(sizeof(liStack));
Q->next = NULL;
return Q;
}
int StackLength(liStack *s){
int i=0; //统计长度变量
liStack *p;
p=s->next; //从头结点的下一个结点开始
while(p!=NULL){
i++;
p=p->next;
}
return(i);
}
bool StackEmpty(liStack *Q){
return(Q->next==NULL);
}
void Push(liStack *s,char e){
liStack *p;
p=(liStack *) malloc(sizeof(liStack)); //建立新结点
p->data = e; //数据放入新结点
p->next = s->next; //修改结点指针
p->next = p;
}
char Pop(liStack *s,char e){
liStack *p;
if(s->next==NULL)
return 0;
p=s->next;
e=p->data; //取值
s->next=p->next;
free(p); //释放空间
return e;
}
char GetTop(liStack *s,char e){
if(s->next==NULL)
return 0;
e=s->next->data;
return e;
}
void DispStack(liStack *s){
liStack *p=s->next;
while(p!=NULL){
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
liStack * ClearStack(liStack *s){
liStack *p=s->next;
while(p!=NULL){
free(s);
s=p;
p=p->next;
}
s->next=NULL;
return s;
}
void DestoryStack(liStack *&s)
{
liStack *pre=s,*p=s->next;
while (p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
free(p);
free(s);
}
main(){
char e;
liStack *s;
printf("(1)初始化栈stack\n");
s=InitStack(s);
printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(3)依次进栈元素: A, B, C, D, E\n");
Push(s,'A');
Push(s,'B');
Push(s,'C');
Push(s,'D');
Push(s,'E');
printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(5)栈长度:%d\n",StackLength(s));
printf("(6)显示从栈顶到栈底元素(不删除):");
DispStack(s);
printf("(7)出栈序列:");
while(!StackEmpty(s)){
e=Pop(s,e);
printf("%c ",e);
}
printf("\n");
printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(9)依次进栈元素: P, T, U\n");
Push(s,'P');
Push(s,'T');
Push(s,'U');
printf("(10)清空栈!\n");
s=ClearStack(s);
printf("(11)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(12)销毁栈!\n");
DestoryStack(s);
}
运行结果长度为0
和别人比对过后和自己审查也没发现错误
结果应该是5,大家可以帮忙看看吗
第一,进栈的元素类型错误,应该用int型或者直接改typedef char ElemType 更方便,另外进栈有误,应该改为p->next=s->next; s->next=p
Push函数里都没有用到s指针,你传了个寂寞啊
p->next=s->next是要干啥,你能解释解释吗