前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言数据结构——链表

C语言数据结构——链表

作者头像
C语言中文社区
发布2022-05-30 15:08:28
1.1K0
发布2022-05-30 15:08:28
举报
文章被收录于专栏:C语言中文社区

今天来介绍一下C语言中常见的一种数据结构——链表

如下是链表的结构示意图:

在链表中有一个头指针变量,图中head表示的就是头指针,这个指针变量保存一个地址。也就是说头指针指向一个变量,这个变量就是量表的元素。在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所包含的数据,而指针部分用来指向下一个元素。最后一个元素的指针指向null,表示指向的地址为空。

从示意图中我们可以看到,head头结点指向第一个元素,第一个元素的指针指向第二个元素,第二个元素的指针又指向第三个元素,第三个元素的指针指向null。这样我们就可以通过头指针寻找链表中的元素。

下来我们通过一个具体的实例来深入地了解一下链表,编写一个学生信息的链表结构,并且将链表中的信息进行输出。

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

struct Student
{
  char name[20];//姓名
  int id;//学号
  struct Student* next;//指向下一个节点的指针
};

int count;//表示链表长度

struct Student* create()
{
  struct Student* head = NULL;//初始化链表的头指针
  struct Student* end, * new;
  count = 0;//初始化链表长度

  end = new = (struct Student*)malloc(sizeof(struct Student));//动态分配内存空间
  printf("请输入姓名,学号\n");
  scanf("%s", &new->name);
  scanf("%d", &new->id);
  while (new->id != 0)
  {
    count++;
    if (count == 1)
    {
      new->next = head;//使得指向为空
      end = new;//跟踪新加入的节点
      head = new;//头指针指向首节点
    }
    else
    {
      new->next = NULL;//新节点的指向为空
      end->next = new;//原来的为节点指向新节点
      end = new;//end指向新节点
    }

    new = (struct Student*)malloc(sizeof(struct Student));//再次动态分配节点的内存空间
    scanf("%s", &new->name);
    scanf("%d", &new->id);

  }
  free(new);//释放空间
  return head;
};

void show(struct Student* head) {
  struct Student *temp;
  int index = 1;
  printf("有%d位学生:\n",count);
  temp = head;
  while (temp != NULL)
  {
    printf("第 %d 位学生的姓名是:%s,学号是:%d \n", index, temp->name, temp->id);
    temp = temp->next;
    index++;
  }
}

int main() {
  struct Student* head;//定义头结点
  head = create();//创建节点
  show(head);//输出链表
  return 0;
}

运行结果

关于实例的代码就不多解释了,注释已经很详细了,多看几遍就明白了。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言中文社区 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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