预习数据结构用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);

 }

回复

共2条回复 我来回复
  • 代码驿站
    这个人很懒,什么都没有留下~
    评论

    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);
    
    }
    
    0条评论
  • 源码客栈
    这个人很懒,什么都没有留下~
    评论

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

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

    参数有问题

    0条评论

发表回复

登录后才能评论