预习数据结构用C语言写链队出现的一个小问题,可能关于指针
毕业设计
1
可以编译,但是没有办法运行 用vs调试,我猜测问题出现在指针初始化上面 (init 函数)
#include<stdio.h>
#include<malloc.h>
typedef struct node
{ struct node *next;
int data;
} QNode;
//
typedef struct aaa
{ QNode *front;
QNode *rear; //指针指向 QNode 类型
}LQueue;
// 初始化
void init (QNode *s,LQueue *L)
{ s= (struct node* )malloc( sizeof(struct node));
L= (LQueue* )malloc( sizeof(LQueue));
s->next=NULL;
L->front=L->rear=(struct node* )malloc( sizeof(struct node)) ;
L->front=L->rear= s;
}
//入队
void push (LQueue *l,int x)
{ QNode *q=NULL;
q= (struct node* )malloc( sizeof(struct node));
q->data=x; q->next=NULL;
l->rear->next=q;
l->rear = q;
}
QNode *pop (QNode *p,LQueue *L,int *x)
{ QNode *s=NULL;
s=L->front;
L->front=L->front->next;
*x = s->data;
free(s);
}
//测试
int main(void)
{ int x=1;int *x1=NULL;
QNode *a = NULL;
LQueue *b =NULL;
init (a,b);
push( b ,x);
// printf("%d",L->rear->data);
}
-
main里边代码执行完了,a,b的值都还是NULL,init传参应该传a和b的地址,init函数的形参两个都应该用二级指针。 如果不这样,就只是把a, b的值传下去了,也就是NULL传下去了,而不能够改变a和b里边的值,也就是init函数并不能把a和b的值改为节点的地址 下边是改好的代码,我已经验证好了,你可以先验证一下,然后再比较不一样的地方,可以再交流
// // main.m // csdn // // Created by 李习文 on 2018/3/4. // Copyright © 2018年 李习文. All rights reserved. // #include #include //#include typedef struct node { struct node *next; int data; } QNode; // typedef struct aaa { QNode *front; QNode *rear; //指针指向 QNode 类型 }LQueue; // 初始化 void init (QNode **s,LQueue **L) { s= (struct node )malloc( sizeof(struct node)); L= (LQueue )malloc( sizeof(LQueue)); (*s)->next=NULL; (*L)->front=(*L)->rear= s; } //入队 void push (LQueue **l,int x) { QNode *q=NULL; q= (struct node )malloc( sizeof(struct node)); q->data=x; q->next=NULL; (*l)->rear->next=q; (*l)->rear = q; } /* QNode *pop (QNode *p,LQueue *L,int *x) { QNode *s=NULL; s=L->front; L->front=L->front->next; *x = s->data; return s; } */ //测试 int main(void) { int x=1;int *x1=NULL; QNode *a = NULL; LQueue *b =NULL; init (&a,&b); push(&b ,x); printf("%d\n",b->rear->data); }
-
void init (QNode **s, LQueue **L)
*s =malloc(….) *L = …….
参数有问题
发表回复