C语言实现链表中结构体嵌套

1.首先,定义两个结构体,一个用于定义链表,一个用于定义数据

// 定义数据相关的结构体
typedef struct Student{
  int stu_id;
  char name[100];
}Stu;

// 定义链表相关的结构体
typedef struct Node{
  Stu student;
  struct Node *next;
}Node,*LinkedList;

2.链表初始化时需要注意student指向stu_id和name方式,用“.”

// 链表初始化
LinkedList LinkedListInit(){
  Node *Head,*L,*LNew;
  int id;
  char name[100];
  // 申请节点空间
  Head = (Node *)malloc(sizeof(Node));
  // 判断是否有足够内存空间
  if(Head == NULL){
    printf("申请空间失败\n");
    exit(-1);
  }

  L = Head;
  L->next = NULL;

  for(int i=0;i<2;i++){
    // 分配第一个节点
    LNew = (Node *)malloc(sizeof(Node));
    // 判断是否有足够内存空间
    if(LNew == NULL){
      printf("申请空间失败\n");
      exit(-1);
    }
    scanf("%d",&id);
    LNew->student.stu_id = id;
    // 注意字符串数组的名字就是首地址,不需要"&"
    scanf("%s",name);
    // 字符复制,用strcpy来复制
    strcpy(LNew->student.name,name);
    L->next = LNew;
    LNew->next = NULL;
    L = LNew;
  }

  return Head;
}

 

具体源码demo.c

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

typedef struct Student{
  int stu_id;
  char name[100];
}Stu;

// 定义结构体类型
typedef struct Node{
  Stu student;
  struct Node *next;
}Node,*LinkedList;



// 链表初始化
LinkedList LinkedListInit(){
  Node *Head,*L,*LNew;
  int id;
  char name[100];
  // 申请节点空间
  Head = (Node *)malloc(sizeof(Node));
  // 判断是否有足够内存空间
  if(Head == NULL){
    printf("申请空间失败\n");
    exit(-1);
  }

  L = Head;
  L->next = NULL;

  for(int i=0;i<2;i++){
    // 分配第一个节点
    LNew = (Node *)malloc(sizeof(Node));
    // 判断是否有足够内存空间
    if(LNew == NULL){
      printf("申请空间失败\n");
      exit(-1);
    }
    scanf("%d",&id);
    LNew->student.stu_id = id;
    scanf("%s",name);
    strcpy(LNew->student.name,name);
    L->next = LNew;
    LNew->next = NULL;
    L = LNew;
  }

  return Head;
}


int main(int argc, char const *argv[]) {
  /* code */
  Node *p;
  p = LinkedListInit();
  p = p->next;
  while(p != NULL){
    printf("%d\t",p->student.stu_id);
    printf("%s\n",p->student.name);

    p = p->next;
  }

  return 0;
}

 

posted on 2018-07-31 15:09  小明在线  阅读(1689)  评论(0编辑  收藏  举报

导航