可以编译,但是没有办法运行
用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);
}
void init (QNode **s, LQueue **L)
*s =malloc(....)
*L = .......
参数有问题
这行代码 push(b ,x); b其实是NULL,你使用init初始化的时候并没有将main方法里面的b进行赋值,对指针还是需要更多理解的
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);
}
入队时情况没分清楚,空队列和非空队列情况不一样,
初始化写的也很不好,只用初始化队列结构就好,链表节点开辟可以抽象为一个函数。
链接里是我写的,你可以看看,有什么问题可以私信,也是我初学的时候写的。