链表的创建与遍历

2023-05-16

       链表,简而言之,就是基于链式储存结构下的线性表。链表包括单向链表、双向链表以及循环链表。

       链表是一种很常用的数据结构,其定义如下:

/**
  * 单向链表的定义
  * 定义说明:包括数据域和指针域
  */
typedef int ElemType;
typedef struct node {
  ElemType data;
  struct node *next;
}LNode,*LinkList;

链表的基本操作包括创建链表、在链表中插入结点、在链表中删除结点、遍历链表中的内容以及销毁链表等。创建链表的方法有两种,一种是“头插入”法,另一种是“尾插入”法。具体代码如下所示:

/**
  *方法描述:“头插入”法创建链表
  *输入参数:int n
  *返回类型:LinkList
  */
LinkList createLinkListHead(int n) {
 LinkList head,p;
 int i;
 head = (LinkList)malloc(sizeof(LNode));
 head->next = null;

 for(i=0;i<n;i++) {
  p = (LinkList)malloc(sizeof(LNode));
  p->data = i+1;
  p->next = head->next;
  head->next = p;
 }
  return head;
}

/**
  *方法描述:“尾插入”法创建链表
  *输入参数:int n
  *返回类型:LinkList
  */
LinkList createLinkListTail(int n) {
 LinkList p,r;
 LinkList list = null;
 int i;
 
 for(i=0;i<n;i++) {
  p = (LinkList)malloc(sizeof(LNode));
  p->data = i+1;
  p->next = null;
  if(!list) {
     list = p;
   } else {
     r->next = p;
    }
     r = p;
  }
  return list;
}

关于这两种方法,简要说明:“头插入”法,首先构建一个带有头结点的空链表,然后创建结点并在链表的头部插入结点,直到创建好链表,利用这种方法创建链表所输入的内容和遍历该链表输出的内容呈现逆序关系,而“尾插入”法实现输入的内容与输出内容表现对应关系,这种方法就是在链表的尾部插入结点,直到创建好链表。

        对于已经创建好的链表,如何遍历链表中的内容并将其输出,可以通过如下代码实现:

/**
 *方法描述:遍历链表内容并输出
 *输入参数:LinkList list
 *返回类型:void
 */
void printLinkListContent(LinkList list) {
  printf("遍历链表并输出内容\n");
   
  while(list) {
   printf("%d  ",list->data);
   list = list->next
  }
   printf("\n");
}

测试代码如下:

#include<stdio.h>
#include<stdlib.h>

/**
 *方法描述:主方法,实现链表的创建与遍历
 *输入参数:
 *返回类型:int
 */
int main() {
  int NUM = 10;
  LinkList list = createLinkListTail(NUM);
  printLinkListContent(list);
  return 0;
}

运行结果如下:

总结:链表采用链式存储结构在内存空间实现线性表的逻辑关系,这种情况下,逻辑关系的有序性并不意味着物理结构的有序性。它包括数据域和指针域两部分,相对于顺序表来说,它方便进行插入、删除操作,但是,线性表的内容遍历与输出需要头指针开始。

参考资料:

【1】谭浩强 著.C程序设计(第三版).北京:清华大学出版社,2007

【2】杨峰 著.妙趣横生的算法(C语言实现).北京:清华大学出版社,2011

   





 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链表的创建与遍历 的相关文章

随机推荐

  • 匿名科创--匿名拓空者PRO--开源光流融合算法使用教程

    1 总体介绍 为了更好的支持匿名TI飞控买家 xff0c 匿名团队开源了基于优象光流模块的飞控算法 xff0c 光流传感器直接连接至匿名拓空者PRO TI版飞控 xff0c 由飞控读取原始光流传感器的光流数据 xff0c 结合高度传感器以及
  • Linux 设备驱动开发实例

    编译和运行 驱动编译要用到kernel的Makefile文件 也就是源码树的编译系统 因此 xff0c 源码需要被配置和编译 xff0c 以ubuntu自带的源码为例 xff1a 编译外部模块 ko 的编译命令是 xff1a make C
  • 匿名科创-匿名光流V3版对天安装介绍

    安装介绍 光流模块对天安装时 xff0c 方向参考上图 注意 xff0c 只有光流模块对上安装 xff0c 激光或超声波测距模块仍然对地安装 配置介绍 如需使用对天模式 xff0c 硬件安装好后 xff0c USB线连接光流模块至上位机 x
  • 从 C51+uCos-II 近距离了解操作系统任务切换原理

    前言 从 C51 43 uCos II 简单介绍下任务切换的原理 方便大家更形象的理解多任务怎么切换 为后续写 x86 43 Linux 任务切换做铺垫练手吧 参考资料如下 xff1a uCos II 源码 单片机原理与应用及 C51 编程
  • Keil+Simulink生成Xcp标定协议A2L文件

    Keil 43 Simulink生成Xcp标定协议A2L文件 由于最近要为ECU移植XCP协议 xff0c 所以记录一下 xff0c 我使用的MCU为NXP S32K144 IDE选用MDK 官方IDE S32DS无代码联想功能 xff0c
  • 记录一下关于MPC5744P CAN总线学习

    记录一下关于MPC5744P CAN总线学习 主要是针对开发出BUSOFF管理 xff0c NXP感觉都是一个套路 xff0c 无论powerpc xff0c 还是arm m status t span class token functi
  • 通过.map文件填写XCP标定需要的A2L文件

    首先你得有一个模板 xff0c 通过python脚本打开编译后的 map文件自动填写到A2L文件对应位置 xff0c 目前只实现了填写Mesurement 区域 xff0c 但是这个填写主要是更新变量名和对应的ECU ADRRESS 因为
  • Autosar Xcp移植

    前言 xff1a 可能有兄弟胸中有点疑问 Vector ETAS等软件包都有XCP xff0c 你移植个吊 xff0c 但是我的MICORSAR BSW中没发现XCP静态代码 xff0c 倒是在CFG中发现了XCP配置选项 xff0c 难道
  • Tricore学习-芯片启动流程

    第一次接触Tricore 学习下从芯片上电到运行到main函数的过程 xff0c 本文以TC36X为例 xff0c 具体可参考英飞凌官方的Infineon AURIX TC3xx Part1 UserManual v02 00 EN 首先T
  • ETAS-AUTOSAR学习-0.1Task配置思考

    span class token function TASK span span class token punctuation span OsTask BSW span class token punctuation span span
  • AurixDevStudio集成MCAL

    这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹 因为我们这里要使用的MCAL而不是i
  • git 使用命令创建新分支

    如何使用Git 命令创建一个新分支 使用场景 xff1a 本文主要详细介绍了如何使用git命令基于一个项目的master分支创建一个新的git分支 xff0c 并且推向远程仓库 xff0c 使其他开发人员能够功能使用该分支进行开发 操作步骤
  • go web gin框架实战1

    文章目录 go web gin框架实战1 参考资料2 demo3 demo运行4 demo解析 go web gin框架实战 1 参考资料 gin框架官方文档 链接 2 demo span class token keyword packa
  • Hadoop之MapReduce

    摘要 xff1a MapReduce是Hadoop的又一核心模块 xff0c 从MapReduce是什么 xff0c MapReduce能做什么以及MapReduce的工作机制三方面认识MapReduce 关键词 xff1a Hadoop
  • Linux常用命令

    摘要 xff1a 采用命令行模式操控Linux系统非常重要 本文总结Linux常用的命令 xff0c 包括命令的含义 xff0c 命令的用法以及命令的拓展 关键词 xff1a 命令行模式 Linux常用命令 给Linux系统下达命令 xff
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号 线 颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下 一图胜千字 xff0c 人们从视觉层更易获取和理解信息 图形工作 R具有非常强大的绘
  • R语言——数据分析的一把利剑

    R语言 xff0c 我把它称之为数据分析的一把利剑 为什么这么说呢 xff1f 先让我们看一下 xff0c 什么是数据分析 xff1f 所谓数据分析 xff0c 就是以商业目的为驱动 xff0c 所开展的获取数据 处理数据 分析数据 展示数
  • 【爱上Linux】第一课 Linux概述

    学习应该是快乐的事情 快乐的东西应该要分享开来 xff0c 人人都快乐 xff01 爱上Linux 第一课 Linux概述 在本课中 xff0c 和朋友们一起来思考这些问题 问题一 xff1a 谈Linux学习 xff1f 从四个方面来看
  • 链表的创建与遍历

    链表 xff0c 简而言之 xff0c 就是基于链式储存结构下的线性表 链表包括单向链表 双向链表以及循环链表 链表是一种很常用的数据结构 xff0c 其定义如下 xff1a 单向链表的定义 定义说明 xff1a 包括数据域和指针域 typ