#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
int initStack(LinkStack s){
s = NULL;
return 0;
}
int getLength(LinkStack s){
int n = 0;
LinkStack p = s;
while(p){
n++;
p = p->next;
}
return n;
}
int push(LinkStack s,int e){
LinkStack p = (LinkStack)malloc(sizeof(StackNode));
if(!p){
return -1;
}
p->data = e;
p->next = s;
s = p;
printf("元素%d进栈!\n",e);
return 0;
}
int pop(LinkStack s,int e){
if(!s){
return -1;
}
LinkStack p = s;
e = p->data;
s = s->next;
free(p);
printf("元素%d出栈!\n",e);
}
int emptyStack(LinkStack s){
if(s){
printf("链栈不为空!\n");
return 1;
}else{
printf("链栈为空!\n");
return 0;
}
}
int getTop(LinkStack s){
if(!s){
return -1;
}
return s->data;
}
int clearStack(LinkStack s){
if(!s){
return -1;
}
LinkStack q;
while(s){
q = s;
s = s->next;
free(q);
}
return 0;
}
int destroyStack(LinkStack s){
if(!s){
return -1;
}
LinkStack q;
while(s){
q = s;
s = s->next;
free(q);
}
return 0;
}
int main(){
int initStatus;
int popElem;
LinkStack s;
// 初始化
initStatus = initStack(s);
if(initStatus == 0){
printf("init successful!\n");
}else{
printf("init failure!\n");
}
// 长度 判空
printf("length: %d\n",getLength(s));
emptyStack(s);
}
```c
请问各位朋友,这个main方法中执行getLength函数总是卡在while上,不知道什么原因,请各位朋友指教一下。
修改见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
int initStack(LinkStack* s){ //修改
(*s) = NULL; //修改
return 0;
}
int getLength(LinkStack s){
int n = 0;
LinkStack p = s;
while(p){
n++;
p = p->next;
}
return n;
}
int push(LinkStack* s,int e){ //修改
LinkStack p = (LinkStack)malloc(sizeof(StackNode));
if(!p){
return -1;
}
p->data = e;
p->next = (*s); //修改
(*s) = p; //修改
printf("元素%d进栈!\n",e);
return 0;
}
int pop(LinkStack* s,int* e){ //修改
if(!s){
return -1;
}
LinkStack p = (*s);
*e = p->data; //修改
(*s) = p->next; //修改
free(p);
printf("元素%d出栈!\n",*e);
return 0;
}
int emptyStack(LinkStack s){
if(s){
printf("链栈不为空!\n");
return 1;
}else{
printf("链栈为空!\n");
return 0;
}
}
int getTop(LinkStack s){
if(!s){
return -1;
}
return s->data;
}
int clearStack(LinkStack* s){ //修改
if(!(*s)){ //修改
return -1;
}
LinkStack q;
while((*s)){ //修改
q = (*s); //修改
(*s) = q->next; //修改
free(q);
}
return 0;
}
int destroyStack(LinkStack* s){ //修改
if(!(*s)){ //修改
return -1;
}
LinkStack q;
while((*s)){ //修改
q = (*s); //修改
(*s) = q->next; //修改
free(q);
}
return 0;
}
int main(){
int initStatus;
int popElem;
LinkStack s;
// 初始化
initStatus = initStack(&s); //修改
if(initStatus == 0){
printf("init successful!\n");
}else{
printf("init failure!\n");
}
push(&s,1);
push(&s,2);
// 长度 判空
printf("length: %d\n",getLength(s));
emptyStack(s);
printf("\n");
pop(&s,&popElem);
pop(&s,&popElem);
//clearStack(&s);
//destroyStack(&s);
printf("length: %d\n",getLength(s));
emptyStack(s);
return 0;
}