单链表与节点
2026/8/30 5:39:20 网站建设 项目流程

经过上次的顺序表,我们这次把链表代码敲出来,看看它们之间不一样地方,时间复杂度是否下降呢,链表和顺序表有什么不一样?

为了方便大家容易理解,AI帮我们生成表格容易理解

链表是物理内存不连续的数据结构,不像数组,元素在内存里挨在一起。链表靠指针保存下一个节点的地址,把分散的节点串起来形成逻辑上的连续序列。

  1. plist:头指针,保存第一个节点的地址0x0012FFB0,通过它找到链表起点。
  2. 每一个方框就是一个节点,节点分为两部分:
    • 数据域:存放数据,图中是1、2、3、4
    • 指针域 (next):存放下一个节点的内存地址
  3. 节点 1 的 next 存0x0012FFA0,指向节点 2; 节点 2 的 next 存0x0012FFD0,指向节点 3; 节点 3 的 next 存0x0012FFC0,指向节点 4;
  4. 最后节点 4 的指针域为NULL,代表链表到此结束,没有后续节点。

什么意思呢,我们直接上代码解释:

看过上一期的顺序表不用多介绍如何创建

test.h

#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int type; typedef struct tg { type date; struct tg* next; }ls; //打印 void print(ls* ps);

test.c

#include "test.h" //打印 void print(ls* ps) { ls* pre = ps; while (pre) { printf("%d ", pre->date); pre = pre->next; } printf("NULL\n"); }

mian.c

#include"test.h" void test1() { ls* node1 = (ls*)malloc(sizeof(ls)); ls* node2 = (ls*)malloc(sizeof(ls)); ls* node3 = (ls*)malloc(sizeof(ls)); ls* node4 = (ls*)malloc(sizeof(ls)); node1->date = 1; node2->date = 2; node3->date = 3; node4->date = 4; node1->next = node2; node2->next = node3; node3->next = node4; node4->next = NULL; ls* ptail = node1; print(ptail); }

进阶代码:https://gitee.com/yang-mianmian-1/singly-linked-list

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询