#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上,不知道什么原因,请各位朋友指教一下。
不带头结点的链栈获取长度错误
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qzjhjxj 2022-01-28 00:03关注
修改见注释,供参考:
#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; }
解决 1无用
悬赏问题
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。
- ¥50 win10链接MySQL
- ¥35 跳过我的世界插件ip验证
- ¥15 抖音看过的视频,缓存在哪个文件
- ¥15 自定义损失函数报输入参数的数目不足
- ¥15 如果我想学习C大家有是的的资料吗
- ¥15 根据文件名称对文件进行排序
- ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
- ¥15 有人会用py或者r画这种图吗