数据结构单链表定义及例题(上)

本文简要的介绍了单链表的定义,以及单链表的头插法和尾插法的实现

文章目录

一、单链表数据结构的定义

二、头插法建立单链表(带头节点)

三、尾插法建立单链表(带头节点)

四、打印单链表

五、测试及全部代码

总结


前言

单链表是学习,以及考研无论是408还是自命题都是很重要的,单链表只要深入理解了,这部分的题会没有问题的.

一、单链表数据结构的定义

//单链表的数据结构定义
typedef struct LNode {ElemType data;//数据struct LNode* next;//下一个节点
}LNode,*Linklist;

二、头插法建立单链表(带头节点)

这里先说一下头节点

头节点:就是建立一个不存储数据的节点当链表为空时,此时就有一个结点,此节点方便插入和删除操作,因为可以不用修改指向链表的指针.

头插法,就是在表头插入元素,这样使得数据在链表中数据的顺序,与插入的顺序相反,故头插法可以将链表逆置.

void CreateLinklist1(Linklist &L,int arr[],int arrlength) {L = (LNode*)malloc(sizeof(LNode));//申请一个头节点assert(L);L->next = NULL;for (int i = 0; i < arrlength; i++) {LNode*pNode = (LNode*)malloc(sizeof(LNode));assert(pNode);pNode->data = arr[i];pNode->next = L->next;//指向头节点的下一个节点L->next = pNode;//更改头节点的下一个节点为插入节点}
}

使用数组向链表中插入元素.

三、尾插法建立单链表(带头节点)

尾插法,就是在链表的尾部插入元素,但链表的指针只指向头节点,所以只能遍历链表找到最后一个节点,但这样太麻烦,所以我们干脆定义一个指针指向尾节点就可以了.

//使用尾插法建立单链表
void CreateLinklist2(Linklist& L,int arr[],int arrlength) {L = (LNode*)malloc(sizeof(LNode));//申请一个头节点assert(L);L->next = NULL;LNode* pTail = L;for (int i = 0; i < arrlength; i++) {LNode* pNode = (LNode*)malloc(sizeof(LNode));assert(pNode);pNode->data = arr[i];//元素赋值pNode->next = pTail->next;//指向尾节点的下一个节点,可以=NULLpTail->next = pNode;//尾节点的指针指向当前节点pTail = pNode;//变化尾指针}
}

四、打印单链表

//打印单链表函数
void print(Linklist L) {LNode* p = L->next;while (NULL != p) {printf("%d ", p->data);p = p->next;}printf("\n");
}

五、测试及全部代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
typedef int ElemType;//单链表的数据结构定义
typedef struct LNode {ElemType data;//数据struct LNode* next;//下一个节点
}LNode,*Linklist;
//使用头插法建立单链表
void CreateLinklist1(Linklist &L,int arr[],int arrlength) {L = (LNode*)malloc(sizeof(LNode));//申请一个头节点assert(L);L->next = NULL;for (int i = 0; i < arrlength; i++) {LNode*pNode = (LNode*)malloc(sizeof(LNode));assert(pNode);pNode->data = arr[i];pNode->next = L->next;L->next = pNode;}
}
//使用尾插法建立单链表
void CreateLinklist2(Linklist& L,int arr[],int arrlength) {L = (LNode*)malloc(sizeof(LNode));//申请一个头节点assert(L);L->next = NULL;LNode* pTail = L;for (int i = 0; i < arrlength; i++) {LNode* pNode = (LNode*)malloc(sizeof(LNode));assert(pNode);pNode->data = arr[i];pNode->next = pTail->next;pTail->next = pNode;pTail = pNode;}
}
//打印单链表函数
void print(Linklist L) {LNode* p = L->next;while (NULL != p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main() {Linklist La=NULL;Linklist Lb = NULL;int arr[20] = { 0 };int arrlength = 0;int enterNum = 999999;printf("请输入序列S:");while (scanf("%d", &enterNum) && enterNum < 999999) {//999999表示输入结束标志arr[arrlength++] = enterNum;}//使用头插法建立单链表CreateLinklist1(La, arr, arrlength);//使用尾插法建立单链表CreateLinklist2(Lb, arr, arrlength);printf("输出头插法链中序列L:");print(La);printf("输出尾插法链中序列L:");print(Lb);return 0;
}

 输入加输出结果:


总结

单链表的数据结构定义,以及采用头插法和尾插法建立单链表,最后输出测试,这部分一定好好理解,对后面的练习会更有帮助.

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

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

相关文章

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws&#xff0c;这是一个经验规律&#xff0c;指出了固定训练成本&#xff08;总计算量FLOPs&#xff09; C C C 时&#xff0c;如何调配模型规模&#xff08;参数量&#xff09; N N N 和训练 Token 数据量 D D D&#xff0c;才能实现…

算法训练day9Leetcode232用栈实现队列225用队列实现栈

今天学习的文章和视频链接 https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 栈与队列理论基础 见我的博客 https://blog.csdn.net/qq_36372352/article/details/135470438?spm1001.2014.3001.5501 232用栈实现…

maven模块化开发部署

之前一直维护迭代的产品,因为有很多客户使用.有些用户有定制化需求,需要添加新的模块功能.因此需要平台主体功能迭代的同时,非主体功能和定制化功能插件化. 一.实现方案 分为开发和部署两个步骤: 1.开发 已经确定肯定是采用maven父子工程,单独的模块可独立开发及独立部署. 原…

Spring中Bean的生命周期

第一、Bean的生命周期 Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程&#xff0c;主要分为以下5个部分&#xff1a; 1.实例化&#xff1a; 给Bean分配内存空间&#xff08;对应JVM中的“加载”&#xff0c;这里只是分配了内存&#xff09;&#xff1b; 2.设…

ffmpeg[学习(四)](代码实现) 实现音频数据解码并且用SDL播放

0、作者杂谈 CSDN大多数都是落后的&#xff0c;要么是到处复制粘贴的&#xff0c;对于初学者我来说困惑了很久&#xff0c;大多数CSDN文章都是使用旧的API &#xff0c;已经被否决了&#xff0c;于是我读一些官方文档&#xff0c;和一些开源项目音视频的输出过程&#xff0c;写…

开源的RNA-Seq分析软件Trinity的详细介绍和使用方法

介绍 GitHub - trinityrnaseq/trinityrnaseq: Trinity RNA-Seq de novo transcriptome assembly Trinity是一种开源的RNA-Seq分析软件&#xff0c;用于转录组的de novo组装。转录组de novo组装是通过将RNA-Seq数据中的短序列片段&#xff08;reads&#xff09;重新组装成完整的…

模型容器与AlexNet构建

一、模型容器——Containers nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 Sequential 容器 nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 • 顺序性&#xff1a;各网络层之间严格按照顺序构建 • 自带forward()&#xf…

x-cmd pkg | grex - 用于生成正则表达的命令行工具

目录 简介首次用户生成的正则表达式与 perl 和 rust 兼容支持 Unicode 符号友好的用户体验进一步阅读 简介 grex 是一个旨在简化创作正则表达式的复杂且繁琐任务的库和命令行程序。这个项目最初是 Devon Govett 编写的 JavaScript 工具 regexgen 的 Rust 移植。但 regexgen 在…

二级C语言备考1

一、单选 共40题 &#xff08;共计40分&#xff09; 第1题 &#xff08;1.0分&#xff09; 题号:6923 难度:较易 第1章 以下叙述中正确的是 A:C语言规定必须用main作为主函数名,程序将从此开始执行 B:可以在程序中由用户指定任意一个函数作为主函数…

Oracle游标深入探讨

Oracle游标深入探讨 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在今天的分享中&#xff0c;我将带大家深入探讨Oracle游标&#xff0c;这是数据库操作中一个极为…

AArch64 Exception Model学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

Python的异常处理案例——网购平台交易案例

需求 假设有多条交易信息&#xff0c;写个raise抛出异常&#xff0c;try…except 负责梳理出正常数据有哪些和非正常数据有哪些 解决 使用 raise 抛出异常并使用 try-except 梳理出正常数据和非正常数据&#xff1a; class InvalidTransactionException(Exception):def __i…

【Rust日报】2024-01-08 async-graphql: 7.0.0 版本发布

认真对待 Rust&#xff0c;多写 Rust 作者通过参与一次黑客马拉松&#xff0c;尝试用Rust重新实现颜色工具&#xff0c;开始了对Rust的深入探索。Rust编译器以友好的错误提示和严格的规则为特点&#xff0c;使作者愈发热衷于写更多Rust代码。Rust社区通过内建lint工具支持新手&…

MySQL基础笔记(3)DML数据操作语句

顾名思义&#xff0c;全称是数据操作语言&#xff0c;用来对数据库中表的数据记录进行增删改操作~ 目录 一.添加数据 1.给指定字段添加数据 2.给全部字段添加数据 3.批量添加数据 二.修改数据 三.删除数据 一.添加数据 1.给指定字段添加数据 insert into 表名 (字段名…

java数据结构与算法刷题-----LeetCode343. 整数拆分(TODO)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

jenkins构建git项目timeout

问题点&#xff1a; Started by user unknown or anonymous Running as SYSTEM Building in workspace /var/jenkins_home/workspace/test-one using credential f28d956-8ee1-4f20-a32b-06879b487c70 Cloning the remote Git repository Cloning repository http://git.cc.co…

Flink CDC使用

Flink 环境准备 Flink 版本对应的CDC版本 两个jar包上传到flink bin目录下 flink-sql-connector-mysql-cdc mysql-connector-java 重启Flink集群

stm32的FMC数据访问与突发模式

数据访问 配置外部存储器的宽度为 16 位&#xff0c; FMC 将使用内部的 ADDR[25:1]地址来作为对外部存储器的寻址地址 FMC_A[24:0]&#xff0c;这段描述是在解释在STM32的FMC&#xff08;Flexible Memory Controller&#xff09;中&#xff0c;如何配置外部存储器的宽度为16位…

资产信息管理系统-前后端开发

题目要求&#xff1a; 资产管理系统 利用H5规范&#xff0c;CSS样式与JS脚本独立于HTML页面&#xff0c;Javascript调用jQuery库&#xff0c;CRUD后端使用FastAPI封装&#xff0c;前端页面在Nginx中运行&#xff0c;调用API模块&#xff0c; 实现CURD的课设总结 基本设计&am…

【已解决】c语言编写的lib如何调用

本博文源于笔者在vs2015正在编写的lib想要调用的问题&#xff0c;正常的操作是将项目生成lib&#xff0c;但是然后又如何操作呢&#xff0c;本博文就是解决这样的问题 文章目录 问题再现步骤1&#xff1a;编写lib.h与lib.c步骤2&#xff1a;生成lib步骤3&#xff1a;添加用得到…