weixin_40182907
坚持可持续
2018-03-01 12:20
采纳率: 38.5%
浏览 1.4k
已采纳

预习数据结构用C语言写链队出现的一个小问题,可能关于指针

可以编译,但是没有办法运行
用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);

 }

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • trojanth
    trojanth 2018-03-02 01:52
    已采纳

    void init (QNode **s, LQueue **L)

    *s =malloc(....)
    *L = .......

    参数有问题

    点赞 评论
  • leilba
    林深 2018-03-01 13:45

    这行代码 push(b ,x); b其实是NULL,你使用init初始化的时候并没有将main方法里面的b进行赋值,对指针还是需要更多理解的

    点赞 评论
  • mmxiwen
    mmxiwen 2018-03-04 10:03

    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);

    }

    点赞 评论
  • qq_38646470
    龙跃十二 2018-03-05 13:30

    入队时情况没分清楚,空队列和非空队列情况不一样,
    初始化写的也很不好,只用初始化队列结构就好,链表节点开辟可以抽象为一个函数。
    链接里是我写的,你可以看看,有什么问题可以私信,也是我初学的时候写的。

    点赞 评论

相关推荐