回 帖 发 新 帖 刷新版面

主题:关于头节点、头指针的问题(请教)

现在准备上机编程,刚开始就有问题了,请帮忙看一下:

#include<stdio.h>
#include<malloc.h>
#define null 0
#define elemtype int


//线性单链表结点

typedef struct lnode{
  elemtype data;
  struct lnode *next;
   }lnode,*Linklist;


//创建函数

void Creat_linklist(lnode &L){    //以L为头结点建立长度为n的链表
  int i,n;
  lnode *p,*q;
  L=(Linklist)malloc(sizeof(lnode));
  L.next=null;
  printf("输入链表元素个数\n");
  scanf("%d",n);
  printf("顺序输入元素");
  q=&L;
  for(i=0;i<n;i++){                     //顺序建立链表
           p=(lnode*)malloc(sizeof(lnode));
           scanf("%d",p->data);
           p->next=null;
           q->next=p;
           q=p;
             }

   }


//输出函数
void Print_list(lnode &L){       //假设元素类型为整型
   lnode *p;
   p=&L;
   p=p->next;
   while(p!=null){
             printf("%d",p->data);
                 }
    }

//主函数

void main()
{

  lnode L;
  Creat_linklist(L);
  Print_list(L);
}


请问: L=(Linklist)malloc(sizeof(lnode));  错在那里了??

回复列表 (共4个回复)

沙发

L=(Linklist*)malloc(sizeof(lnode));

板凳

void Creat_linklist(lnode &L);
函数的参数中,应该改为linklist &L
因为L=(Linklist)malloc(sizeof(lnode));中分配的是Linklist类型的

3 楼

我看了一下你的程序,你用到了引用&,其实C中没有引用&的,C中的&表示取地址.如果要用&的话,那么保存为.CPP也行.我们互相学习啊!以下是我改动了你程序的地方.运行了一下可以运行.注意保存为.CPP的后缀格式!
#include<stdio.h>
#include<malloc.h>
#define null 0
#define elemtype int


//线性单链表结点

typedef struct lnode{
  elemtype data;
  struct lnode *next;
   }lnode,*Linklist;

//创建函数

void Creat_linklist(lnode &L){    //以L为头结点建立长度为n的链表
  int i,n=0;
  lnode *p,*q;
  q=&L;
  q->next=null; 
  printf("输入链表元素个数\n");
  scanf("%d",&n); 
  printf("顺序输入元素");
  for(i=0;i<n;i++){                     //顺序建立链表
           p=(lnode*)malloc(sizeof(lnode));
           scanf("%d",&(p->data));
           p->next=NULL;
           q->next=p;
           q=p;
  }




//输出函数
void Print_list(lnode &L){       //假设元素类型为整型
   lnode *p;
   p=&L;
   p=p->next;
   while(p!=null){
             printf("%d\t",p->data);
             p=p->next;
                 }
    }

//主函数

void main()


  lnode L;
  Creat_linklist(L);
  Print_list(L);
}
你说的"请问: L=(Linklist)malloc(sizeof(lnode));  错在那里了??",用malloc()函数等式左边应为指针类型,而L不是指针.所以不行.

4 楼

你的是C语言描述的吗?还是C++?
C语言里面我记得好像不能用 &L1的引用的吧?应该用指针 *L1
其次,如果你用了“引用”,即&,则不能用->的形式,而要用点
例如 L1.next

我来回复

您尚未登录,请登录后再回复。点此登录或注册