前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言链表实例--玩转链表

C语言链表实例--玩转链表

作者头像
用户6754675
修改2020-03-24 14:39:48
1.5K0
修改2020-03-24 14:39:48
举报
文章被收录于专栏:嵌入式单片机嵌入式单片机

  下图为最一简单链表的示意图:

  第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩 score 等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。

  指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。

  在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为 0。这样一种连接方式,在数据结构中称为“链表”。

  而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现

  例如:每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。

  一个存放学生学号和成绩的结点应为以下结构:

  struct stu

  { int num;

  int score;

  struct stu *next;

  }

  前两个成员项组成数据域,后一个成员项 next 构成指针域,它是一个指向 stu 类型结构

  的指针变量。

  链表的基本操作对链表的主要操作有以下几种:

  1. 建立链表;

  2. 结构的查找与输出;

  3. 插入一个结点;

  4. 删除一个结点;

  建立一个三个结点的链表,存放学生数据。为简单起见, 我们假定学生数据结

  构中只有学号和年龄两项。可编写一个建立链表的函数 creat。程序如下:

  #define NULL 0

  #define TYPE struct stu

  #define LEN sizeof (struct stu)

  struct stu //定义结点结构

  {

  int num;

  int age;

  struct stu *next;//指针域,用来存放下一个结点的地址

  };

  TYPE *creat(int n)//n代表创建n个结点链表

  {

  struct stu *head,*pf,*pb;

  int i;

  for(i=0;i

  {

  pb=(TYPE*) malloc(LEN);

  printf("input Number and Age\n");

  scanf("%d%d",&pb->num,&pb->age);

  if(i==0)

  pf=head=pb;//结点首地址

  else pf->next=pb;

  pb->next=NULL;

  pf=pb;

  }

  return(head);

  }

  在函数外首先用宏定义对三个符号常量作了定义。这里用 TYPE 表示 struct stu,用 LEN表示 sizeof(struct stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便。结构stu 定义为外部类型,程序中的各个函数均可使用该定义。

  creat 函数用于建立一个有 n 个结点的链表,它是一个指针函数,它返回的指针指向 stu结构。在 creat 函数内定义了三个 stu 结构的指针变量。head 为头指针,pf 为指向两相邻结点的前一结点的指针变量。pb 为后一结点的指针变量。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档