【408考点之数据结构】线性表的链式表示实现代码

线性表的链式表示

在数据结构中,线性表是一种常见的结构,用于存储和管理一组有序的元素。线性表的链式表示是一种灵活且高效的存储方式,特别适用于频繁插入和删除操作的场景。下面我们来探讨单链表、循环链表和双向链表的特点和实现。

单链表

定义和特点
单链表由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单链表的特点是结构简单,插入和删除操作较为方便,但只能单向遍历,不支持逆向访问。

实现

typedef struct Node {int data;struct Node *next;
} Node, *LinkList;// 初始化单链表
void initList(LinkList *L) {*L = (LinkList)malloc(sizeof(Node));(*L)->next = NULL;
}// 插入元素
int insertElement(LinkList L, int pos, int elem) {LinkList p = L;int j = 0;while (p && j < pos) {p = p->next;j++;}if (!p || j > pos) return -1;LinkList s = (LinkList)malloc(sizeof(Node));s->data = elem;s->next = p->next;p->next = s;return 0;
}// 删除元素
int deleteElement(LinkList L, int pos) {LinkList p = L;int j = 0;while (p->next && j < pos) {p = p->next;j++;}if (!p->next || j > pos) return -1;LinkList q = p->next;p->next = q->next;free(q);return 0;
}
循环链表

定义和特点
循环链表是单链表的一种变形,区别在于最后一个节点的指针指向头节点,从而形成一个环。循环链表适用于需要循环访问的场景,但仍然只能单向遍历。

实现

// 初始化循环链表
void initCircularList(LinkList *L) {*L = (LinkList)malloc(sizeof(Node));(*L)->next = *L;  // 指向自身形成环
}// 插入元素和删除元素操作与单链表类似,只需调整指针
双向链表

定义和特点
双向链表的每个节点包含两个指针,一个指向前驱节点,一个指向后继节点。这种结构允许双向遍历,使插入和删除操作更加灵活。双向链表适用于需要频繁访问前驱和后继节点的场景。

实现

typedef struct DNode {int data;struct DNode *prior, *next;
} DNode, *DLinkList;// 初始化双向链表
void initDList(DLinkList *L) {*L = (DLinkList)malloc(sizeof(DNode));(*L)->next = NULL;(*L)->prior = NULL;
}// 插入元素
int insertElement(DLinkList L, int pos, int elem) {DLinkList p = L;int j = 0;while (p && j < pos) {p = p->next;j++;}if (!p || j > pos) return -1;DLinkList s = (DLinkList)malloc(sizeof(DNode));s->data = elem;s->next = p->next;s->prior = p;if (p->next) p->next->prior = s;p->next = s;return 0;
}// 删除元素
int deleteElement(DLinkList L, int pos) {DLinkList p = L;int j = 0;while (p->next && j < pos) {p = p->next;j++;}if (!p->next || j > pos) return -1;DLinkList q = p->next;if (q->next) q->next->prior = p;p->next = q->next;free(q);return 0;
}
选择合适的链式存储结构

在实际应用中,选择合适的链式存储结构需要根据具体需求进行权衡:

  • 单链表适用于插入和删除操作较多,但不需要双向遍历的场景。
  • 循环链表适用于需要循环访问的场景,如任务调度系统。
  • 双向链表适用于频繁需要访问前驱和后继节点的场景,如浏览器的前进和后退功能。

通过理解单链表、循环链表和双向链表的特点和实现,我们可以更好地应用这些数据结构来优化程序性能,提高运行效率。这不仅在理论上有重要意义,在实际编程中也非常实用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析 笔记

截图摘自湖南大学彭鹏老师的ppt。笔记也是根据他的ppt整理的。 动态规划 核心 用数组记录中间结果&#xff0c;避免重复计算 三角数塔问题 问题描述 给定一个三角形数塔&#xff0c;从顶部出发&#xff0c;每次只能移动到下一行的相邻元素。要求找到一条路径&#xff0c;…

Mac 本地启动 Dify

本地启动 dify 拉取 dify 文件 git clone https://github.com/langgenius/dify.git启动底层服务 cd dify/docker docker-compose -f docker-compose.middleware.yaml -p dify up -d启动后端 API 安装 poetry brew install poetry配置 cd ../api cp .env.example .env sed…

VS Code安装及环境配置(超详细)

VS Code简介 Visual Studio Code&#xff08;简称 VS Code &#xff09;是 Microsoft 于2015年4月发布的一款代码编辑器&#xff0c;以界面简洁、轻量著称。 它是一款免费开源的现代化轻量级代码编辑器&#xff0c;支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

[面试题]Jenkins

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

刷题——比较版本号

比较版本号_牛客题霸_牛客网 int compare(string version1, string version2) {int len1 version1.size();int len2 version2.size();int i0,j0;while(i<len1 || j <len2){long num1 0 ;while(i <len1 && version1.charAt(i) ! .){num1 num1*10 (version1…

理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现)

网络嗅探器是监控和分析网络流量的一种工具&#xff0c;它能够捕获数据包并提取出关键的信息&#xff0c;比如IP地址和MAC地址。 网络嗅探器工作原理基于网卡的工作模式。正常情况下&#xff0c;网卡只处理发送给它的数据包&#xff0c;忽略其他数据。但是&#xff0c;如果将网…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

如何培养员工的竞争意识

一、背景 在当今快速变化的商业环境中,培养员工的竞争意识对于企业的长期成功至关重要。通过激发员工的竞争精神,企业能够提升整体绩效,增强创新能力,并在市场竞争中保持领先地位。本文将从多个方面探讨如何培养员工的竞争意识。 二、明确目标设定 设定清晰具体的目标:明…

技术性屏蔽百度爬虫已经一周了!

很久前明月就发现百度爬虫只抓取、只收录就是不给流量了&#xff0c;加上百度搜索体验越来越差&#xff0c;反正明月已经很久没有用过百度搜索&#xff0c;目前使用的浏览器几乎默认搜索都已经修改成其他搜索引擎了&#xff0c;真要搜索什么&#xff0c;一般都是必应谷歌结合着…

企业ERP系统规划图

企业ERP系统规划图 1. 基础架构层 - 硬件&#xff1a;服务器、存储设备、网络设备 - 软件&#xff1a;操作系统、数据库管理系统、中间件 2. 数据管理与集成层 - 数据仓库&#xff1a;集中存储企业数据 - 数据集成&#xff1a;ETL&#xff08;Extract, Transform…

Java数据类型转换

Java中的数据类型转换分为两种&#xff1a;隐式转换&#xff08;也称作自动类型转换&#xff09;和显式转换&#xff08;也称作强制类型转换&#xff09;。隐式转换发生在低精度的数据类型向高精度的数据类型转换时&#xff0c;这种转换是安全的&#xff0c;不会导致数据丢失。…

uni-CMS:全端开源内容管理系统的技术探索

摘要 本文介绍了uni-CMS&#xff0c;一个基于uniCloud开发的开源内容管理系统&#xff08;CMS&#xff09;。该系统旨在帮助开发者快速搭建并管理内容丰富的网站、小程序和移动应用。通过其全端渲染、内容安全检测、广告解锁付费内容以及AI生成文章等特性&#xff0c;uni-CMS不…

cesium 添加 Echarts 饼图

cesium 添加 Echarts 饼图 1、实现思路 1、首先创建echarts饼图,拿到创建好的canvas 2、用echarts里面生成的canvas添加到cesium billboard中 2、示例代码 <!DOCTYPE html> <html lang="en"><head><

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少

“我的团队努力了&#xff0c;并且成功了&#xff0c;”COI负责人诺埃尔沃尔什说。 微软已悄然终止了始于2013年的水下数据中心&#xff08;UDC&#xff09;项目“纳蒂克”。该公司向DatacenterDynamics确认了这一消息&#xff0c;微软云运营与创新部门负责人诺埃尔沃尔什表示…

STM32 Customer BootLoader 刷新项目 (二) 方案介绍

STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析 首先在开始编程之前&#xff0c;我们先详细设计一下BootLoder的方案。 本项目做…

openjudge_2.5基本算法之搜索_917:Knight Moves

题目 917:Knight Moves 总时间限制: 1000ms 内存限制: 65536kB 描述 Background Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him? The Problem Your task is to wr…

python3GUI--ktv点歌软件By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三&#xff0e;心得体会1.关于代码2.关于设计3.关于打包 四&#xff0e;总结 文件大小&#xff1a;33.…

C++ 关联容器使用 map, unordered_map, set, unordered_set, multiset, unordered_multiset

关联容器是否有序是否关联值是否可重复访问时间set是否否对数map是是否对数multiset是否是对数multimap是是是对数unordered_map否是否常数unordered_set否否否常数unordered_multiset否否是常数unordered_multimap否是是常数 #include <map> #include <set> #incl…