前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据结构】线性表的链式表示之单链表

【数据结构】线性表的链式表示之单链表

作者头像
程序员周同学
发布2019-07-23 10:30:52
4580
发布2019-07-23 10:30:52
举报

微信公众号:程序员周同学 关注可了解更多的教程及编程技巧。问题或建议,请公众号留言; 如果你觉得对你有帮助,欢迎点赞

内容目录

线性表的链式表示之单链表单链表的特点单链表的储存结构单链表的结点单链表的储存结构

线性表的链式表示之单链表

顺序表的链式表示其实就是我们所“熟知”的链表,链表分为:

  • 单向链表---今天讲这个
  • 双向链表
  • 循环链表

单链表的特点

单链表作为线性表的一种,首先肯定是具备线性表的两种特点的:

  1. 除了首尾两个元素之外,每个元素的前面和后面只有一个数据元素
  2. 可以在任意位置插入元素和删除元素
    • 单链表中,删除和插入元素不需要移动其他元素
    • 单链表执行查找元素操作时,平均效率是O(n)

    同样在这篇文章中主要讲插入删除元素,因为另外两个操作都可以基于删除操作演变而来,所以两个操作只给出代码。

单链表的储存结构

C语言的链表可能是很多人的噩梦,因为要频繁用到指针操作。在顺序表中我们了解到,顺序表的每个元素的内存空间是连续的,而链表每个数据元素的内存空间是不连续的,所以必须要使用指针将所有的结点连接起来。如果有一个结点没有连接,那你就再也找不到他了。

单链表的结点

单链表的结点结构

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//定义DataType类型
struct linkedList{
    DataType data;//结构体数据域
    struct linkedList *next;//结构体指针域
}
单链表的储存结构

单链表的储存结构

    //创建结构体指针,head,node,end用于创建链表,traverse用于遍历链表,此处无用
    //明天将创建链表封装成函数
    struct linkedList *head,*node,*end,*traverse;
    int data;
    head = NULL;
    int n;
    scanf("%d",&n);
    for (int i = ; i < n; i++) {
        scanf("%d",&data);
        //malloc是stdlib.h中的函数,所以必须导入头文件
        //为node指针分配一个struct linkedList大小的空间
        node = (struct linkedList*)malloc(sizeof(struct linkedList));
        //将node的数据域赋值为data
        node->data = data;
        //将node的指针域赋值为NULL,即:指向空内存
        node->next = NULL;
        //如果头结点为空,则把node赋值给head
        if (head == NULL)
            head = node;
        //如果不为空,则将end的指针域指向node
        else
            end->next = node;
        //将node赋值给end
        end = node;
    }

每一个结点通过next结构体指针指向下一个结点,直到最后一个结点指向NULL,即空内存。 以下是创建链表的图示:

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

本文分享自 程序员周同学 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容目录
  • 线性表的链式表示之单链表
  • 单链表的特点
  • 单链表的储存结构
    • 单链表的结点
      • 单链表的储存结构
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档