桌面视频播放器渲染后端调试:OpenGL、Direct3D、Vulkan与Metal适配
2026/8/30 6:29:04
经过上次的顺序表,我们这次把链表代码敲出来,看看它们之间不一样地方,时间复杂度是否下降呢,链表和顺序表有什么不一样?
为了方便大家容易理解,AI帮我们生成表格容易理解
链表是物理内存不连续的数据结构,不像数组,元素在内存里挨在一起。链表靠指针保存下一个节点的地址,把分散的节点串起来形成逻辑上的连续序列。
plist:头指针,保存第一个节点的地址0x0012FFB0,通过它找到链表起点。1、2、3、40x0012FFA0,指向节点 2; 节点 2 的 next 存0x0012FFD0,指向节点 3; 节点 3 的 next 存0x0012FFC0,指向节点 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