《数据结构与算法分析》课程设计:顺序表、单链表、顺序栈、查找、排序算法
数据结构与算法分析实验报告

数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。
通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。
2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。
体会到链表在动态内存管理和灵活操作方面的优势。
(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。
2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。
(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。
2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。
(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。
2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。
(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。
2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。
四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。
删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。
C语言算法设计与分析排序查找和算法

C语言算法设计与分析排序查找和算法C语言算法设计与分析:排序、查找和算法C语言作为一门广泛应用于计算机领域的编程语言,算法设计与分析是每个程序员都需要掌握的重要技能之一。
本文将介绍C语言中常用的排序算法、查找算法以及一些常见的算法技巧,并详细分析它们的原理和实现方法。
一、排序算法1. 冒泡排序(Bubble Sort)冒泡排序是最简单的排序算法之一。
它的基本思想是通过相邻元素之间的比较和交换来将序列中的较大元素逐步向右移动。
具体实现时,从待排序序列的左侧开始,将较大的元素向右冒泡,直至序列有序。
冒泡排序的时间复杂度为O(n^2)。
2. 插入排序(Insertion Sort)插入排序的思想是将待排序序列分为已排序和未排序两部分,从未排序序列中选择元素并插入到已排序序列的适当位置。
具体实现时,从待排序序列的左侧开始,逐个将元素插入到已排序序列中的正确位置,直至序列有序。
插入排序的时间复杂度为O(n^2),但在部分有序的序列中具有较好的性能。
3. 快速排序(Quick Sort)快速排序是一种高效的排序算法,它的基本思想是通过每一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素小于另一部分的所有元素,并分别对这两部分进一步排序。
具体实现时,选择一个基准元素,将小于基准的元素放到左侧,大于基准的元素放到右侧,然后对左右两部分分别进行递归排序。
快速排序的平均时间复杂度为O(nlogn)。
二、查找算法1. 顺序查找(Sequential Search)顺序查找是一种简单直观的查找算法。
它的基本思想是从待查找的序列的左侧开始,逐个比较序列中的元素和待查找元素,直到找到匹配的元素或查找结束。
顺序查找的时间复杂度为O(n)。
2. 二分查找(Binary Search)二分查找是一种高效的查找算法,但要求待查找序列必须是有序的。
它的基本思想是通过每一次查找将待查找序列划分为两部分,并将中间元素与待查找元素进行比较,进而确定下一次查找的范围。
数据结构、算法及线性表总结

数据结构、算法及线性表总结⼀、思维导图⼆、重要概念1.算法分析:1.时间复杂度分析:T(n)与函数规模⼤⼩相关。
2.空间复杂度分析:与临时变量所占空间有关。
3.递归算法时间与空间复杂度:都应该写出递推式,通过求解递推式来获得时间复杂度和空间复杂度。
2.线性表:1.顺序表:有随机存取特性,但其算法时间主要花费在删除和插⼊元素时元素移动上。
2.链表:不需要移动元素,没有随机存取特性,算法时间主要花费在遍历元素上。
3.队列:1.⼀种操作受限的线性表,仅允许在表⼀端进⾏插⼊,在表另⼀端进⾏删除。
删除⼀端为队头或队⾸,插⼊⼀端为队尾。
因⽽队列⼜称为先进先出表。
2.顺序队:初始化队列时:front与rear指针为-1。
1.判断队空条件:q->front==q->rear;2.判断队满条件:q->rear=MaxSize-1(数组最⼤下标)。
3.进队:rear加⼀,将元素放⼊data数组rear位置;4.出队:将front加⼀,取出data数组front位置元素。
3.环形队:初始化时front与rear指针为0。
1.进队:rear=(rear+1)%MaxSize2.出队:front=(front+1)%MaxSize3.判断队空条件:q->rear==q->front4.判断队满条件:(q->rear+1)%MaxSize=q->front作⽤:解决了队列的假溢出问题,但队⾥最多只有MaxSize-1个元素。
4.链队:1.链队不存在队满溢出问题。
可使⽤c++的头⽂件<queue>使⽤。
3.栈:1.特点:后进先出表。
2.顺序栈:进栈:top++;出栈:top--;3. 链栈同样没有链满问题。
参考:可⽤c++头⽂件<stack>。
4.串:串是由字符数据组成的有限序列1.顺序串与链串2.难点:串的模式匹配:BF算法:⽬标串的第⼀个字符开始和模式串第⼀个字符匹配,匹配成功,⽐较⽬标串和模式串的后续元素(即i++,j++),匹配失败,⽬标串回溯到刚开始元素的后续元素。
数据结构与算法教学大纲

《数据结构》教学大纲一、课程基本信息课程名称:数据结构总学时:64(理论课内学时48,上机课内学时16)课程设计:24课程类型:必修课考试形式:半开卷考试讲课对象:计算机本科建议教材:《数据结构》(C语言版)陈明编著清华大学出版社课程简介:数据结构课程介绍如何组织各种数据在计算机中的存储、传递和转换。
内容包括:数组、链接表、栈和队列、串、树与森林、图、排序、查找、索引与散列结构等。
课程以结构化程序设计语言C语言作为算法的描述工具,强化数据结构基本知识和结构化程序设计基本能力的双基训练。
为后续计算机专业课程的学习打下坚实的基础。
二、课程的教学目标“数据结构”是计算机相关专业的一门重要专业基础课,是计算机学科的公认主干课。
课程内容由数据结构和算法分析初步两部份组成。
数据结构是针对处理大量非数值性程序问题而形成的一门学科,内涵丰富、应用范围广。
它既有完整的学科体系和学科深度,又有较强的实践性。
通过课程的学习,应使学生理解和掌握各种数据结构(物理结构和逻辑结构)的概念及其有关的算法;熟悉并了解目前常用数据结构在计算机诸多领域中的基本应用。
算法分析强调最基本的算法设计技术和分析方法。
要求学生从算法和数据结构的相互依存关系中把握应用算法设计的艺术和技能。
经过上机实习和课程设计的训练,使学生能够编制、调试具有一定难度的中型程序;以培养良好的软件工程习惯和面向对象的软件思维方法。
“数据结构”的前序课是《离散数学》、《C语言程序设计与算法初步》。
三、理论教学内容的基本要求及学时分配1、序论(2学时)学习目标:熟悉各类文件的特点,构造方法以及如何实现检索,插入和删除等操作。
重点与难点:本章无。
知识点:数据、数据元素、数据结构、数据类型、抽象数据类型、算法及其设计原则、时间复杂度、空间复杂度。
2、线性表(4学时)学习目标:(1)了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。
数据结构与算法实验报告5-查找与排序

北京物资学院信息学院实验报告
课程名_数据结构与算法
实验名称查找与排序
实验日期年月日实验报告日期年月日姓名______ ___ 班级_____ ________ 学号___
一、实验目的
1.掌握线性表查找的方法;
2.了解树表查找思想;
3.掌握散列表查找的方法.
4.掌握插入排序、交换排序和选择排序的思想和方法;
二、实验内容
查找部分
1.实现顺序查找的两个算法(P307), 可以完成对顺序表的查找操作, 并根据查到和未查到两种情况输出结果;
2.实现对有序表的二分查找;
3.实现散列查找算法(链接法),应能够解决冲突;
排序部分
4.分别实现直接插入排序、直接选择排序、冒泡排序和快速排序算法
三、实验地点与环境
3.1 实验地点
3.2实验环境
(操作系统、C语言环境)
四、实验步骤
(描述实验步骤及中间的结果或现象。
在实验中做了什么事情, 怎么做的, 发生的现象和中间结果, 给出关键函数和主函数中的关键段落)
五、实验结果
六、总结
(说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)。
《数据结构与算法》教学大纲

《数据结构与算法》教学大纲
一、数据结构与算法教学大纲
数据结构与算法是计算机科学领域的基础,在计算机工程专业的学习和实践中有着重要的地位。
本课程旨在让学生掌握基本的数据结构、算法理论和实现技术,提高其计算机应用的能力。
1.数据结构
(1)线性结构
(a)线性表:顺序表、链表、栈、队列以及相关算法的实现分析
(b)稀疏矩阵的存储及算法
(c)串的基本操作及相关算法
(2)非线性结构
(a)树与二叉树:二叉树的存储、遍历及算法
(b)图:邻接表与邻接矩阵的存储方式,最短路径、最小生成树的求解
2.算法
(1)算法概念:算法的特征、分析及评价、设计的基本方法
(2)排序算法:冒泡排序、快速排序、折半插入排序、希尔排序及其它复杂度下的排序算法比较
(3)查找算法:二叉排序树、散列表及其它查找算法比较
(4)图算法:深度优先、广度优先等图算法
(5)贪心算法及其应用
(6)分治策略及应用
(7)动态规划及应用
3.数据结构和算法的应用
(1)图像处理和计算机视觉:图像缩放和滤波、边缘提取、轮廓绘制及相关算法。
数据结构与算法详解

数据结构与算法详解数据结构和算法是计算机科学中非常重要的两个概念。
数据结构是一种数据组织和存储方式,它能够提高数据的访问和处理效率。
算法是一种解决问题的具体步骤,可以优化问题的解决方式。
在计算机科学中,数据结构和算法被广泛应用于软件开发、数据处理、计算机通信等方面。
本文将深入介绍数据结构和算法的相关内容。
一、常用数据结构常见的数据结构有数组、链表、堆、栈、队列、散列表、二叉树等。
下面依次介绍这些数据结构的特点。
1. 数组数组是一种线性结构,由一组相同类型的元素组成并按照一定的顺序存储。
数组具有下标定位和随机访问等优点,适用于元素较少且随机查询比较频繁的情况。
2. 链表链表也是一种线性结构,由一系列不同类型的数据节点组成。
每个节点包含一个数据项和指向下一个节点的指针。
链表具有灵活的插入和删除操作,适用于元素较多且数据分散的情况。
3. 堆堆是一种特殊的树形结构,它满足父节点的键值总是大于或等于子节点的键值。
堆常用于优先队列、排序等场景中。
4. 栈栈是一种特殊的线性结构,它的数据存储在一个简单的表中,只有在表的一端进行插入和删除操作。
栈的操作是“后进先出”,适用于回溯、表达式求值等场景中。
5. 队列队列也是一种特殊的线性结构,它的数据存储在一个简单的表中,只能从表的一端进行插入,从另一端进行删除。
队列的操作是“先进先出”,适用于排队、广度优先搜索等场景中。
6. 散列表散列表也叫哈希表,是一种根据键值(key)而直接访问到值(value)的数据结构。
散列表通过哈希函数将键映射到表中位置,从而实现快速查找。
7. 二叉树二叉树是一种特殊的树形结构,每个节点最多有两个子节点。
二叉树包含前序遍历、中序遍历、后序遍历等方法,适用于排序、查找等场景中。
二、常用算法常见的算法包括排序、搜索、图算法等。
下面依次介绍这些算法的特点。
1. 排序算法排序算法是将一组未排序的数据按照一定的规则进行排序的算法。
常见的排序算法有冒泡排序、快速排序、插入排序、选择排序、归并排序、计数排序、桶排序、基数排序等。
《数据结构与算法分析》课程教学大纲

本科生课程大纲课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修一、课程介绍1.课程描述:数据结构与算法分析是学习利用计算机语言编写质量更好的程序以及软件的一门课程,是提高计算机编程水平的必由之路,为日后学习相关课程打下一个坚实的基础。
本课程针对低年级地球信息科学与技术专业和勘查技术与工程专业本科生学生开设,课程主要内容包括:数据结构及其算法,文件读写,查找和排序算法等。
通过课程学习,要求学生能够掌握计算机存储(包括内存和外存)数据的基本方法和常用模式以及其算法,提高编写程序、调试程序的能力,课程结束后能够完成较复杂程序的设计和编制。
2.设计思路:本课程引导低年级地球信息科学与技术专业和勘查技术与工程专业学生掌握利用计算机语言编写实用可靠的程序的基础理论和实际操作方法,提升自身的科研和工作技能。
课程内容的选取基于学生掌握了一定的计算机语言知识。
课程内容分为四个模块:数据结构介绍;常用的数据结构及其算法;文件读写;查找和排序算法。
这三个方面相互关联,互为补充,覆盖了计算机数据存储、管理和处理等的主要模式和方法。
3. 课程与其他课程的关系:- 1 -本课程需要本科生在完成低年级阶段的计算机语言的基础上开设。
先修课程:《C 程序设计》。
二、课程目标本课程目标是为低年级地球信息科学与技术专业和勘查技术与工程专业学生提供一个深入学习计算机编程的平台,引导并培养学生使用计算机语言来描述、管理和处理数据的能力,提高计算机编程水平。
到课程结束时,学生应能:(1)熟练掌握常用的计算机数据在内存中存储的方法及其常用算法;(2)掌握文件的读写操作,合理的利用文件存储数据;(3)掌握查找和排序常用的算法;(4)掌握如何编制可靠的程序以及程序调试的技巧。
三、学习要求要完成所有的课程任务,学生必须:(1)按时上课,上课认真听讲,积极参与课堂讨论。
(2)按时完成上机练习,对地质数据进行分析和处理,提交正式的上机报告。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******大学《数据结构与算法分析》课程设计题目:数据结构上机试题学生姓名:学号:专业:信息管理与信息系统班级:指导教师:2014年04月目录一、顺序表的操作 (2)【插入操作原理】 (2)【删除操作原理】 (2)【NO.1代码】 (3)【运行截图演示】 (7)二、单链表的操作 (10)【创建操作原理】 (10)【插入操作原理】 (10)【删除操作原理】 (10)【NO.2代码】 (11)【运行截图演示】 (20)三、顺序栈的操作 (25)【数值转换原理】 (25)【NO.3代码】 (26)【运行截图演示】 (30)四、查找算法 (32)【顺序查找原理】 (32)【折半查找原理】 (32)【NO.4代码】 (33)【运行截图演示】 (38)五、排序算法 (40)【直接插入排序原理】 (40)【快速排序原理】 (40)【NO.5代码】 (41)【运行截图演示】 (46)一、顺序表的操作(1)插入元素操作:将新元素x 插入到顺序表a 中第i 个位置;(2)删除元素操作:删除顺序表a 中第i 个元素。
【插入操作原理】线性表的插入操作是指在线性表的第i-1个数据元素和第i 个数据元素之间插入一个新的数据元素,就是要是长度为n 的线性表:()11,,,,,i i n a a a a -…………变成长度为n+1的线性表:()11,,,,,,i i n a a b a a -…………数据元素1i a -和i a 之间的逻辑关系发生了变化。
(其【插入原理】在课本P23的算法2.3有解释)【删除操作原理】反之,线性表的删除操作是使长度为n 的线性表:()111,,,,,,i i i n a a a a a -+…………变成长度为n-1的线性表:()111,,,,,i i n a a a a -+…………数据元素1i a -、i a 和1i a +之间的逻辑关系发生变化,为了在存储结构上放映这个变化,同样需要移动元素。
(其【删除原理】在课本P24的算法2.4有解释)【NO.1代码】#include<stdio.h>#define MAX 100typedef int datatype;typedef struct{datatype data[MAX];int list;}sequenlist; /*顺序表*/int main(){int insert( sequenlist *L, int x, int i );int deletee( sequenlist *L, int i );int input( sequenlist *L );int output( sequenlist *L );sequenlist s,*p=&s;int indata,inlocate,deletedx;input(p);printf( "请输入要插入的数:" ); scanf( "%d",&indata );printf( "请输入要插入的位置:" );scanf( "%d",&inlocate );insert( p,indata,inlocate );printf( "插入后的数据:" );output(p);printf( "请输入要删除的位置:" );scanf( "%d",&deletedx );deletee( p, deletedx );printf( "删除后的数据:" );output(p);return 0;}int output( sequenlist *L ){int i;for( i=0; i<=L->list; i++ )printf( "%d ",L->data[i] );printf( "\n\n" );return(1);}int input( sequenlist *L ) {int i;printf( "请输入原始数据个数:" );scanf( "%d",&( L->list ) );L->list--;printf( "请输入原始数据:" );for( i=0; i <= L->list; i++ )scanf( "%d",&( L->data[i] ) );printf( "原始数据为:" );output(L);return (1);}int insert( sequenlist *L, int x, int i ){int j;if ( ( (*L).list )>=MAX-1 ){printf( "overflow" ); return 0;}else{if ( (i<1) || (i> ( (*L).list )+1 ) ) {printf( "error\n" );return 0;}else{for ( j=L->list;j>=i-1;j-- )L->data[j+1]=L->data[j];L->data[i-1]=x;L->list++;}}return(1);}int deletee( sequenlist *L,int i ) /*定义删除函数*/ {int j;if ( (i<1) || ( i>(L->list)+1 ) ){printf( "error\n" );return 0;}else{for ( j=i;j<=L->list;j++ )L->data[j-1]=L->data[j];L->list--;}return(1);}【运行截图演示】①、如下面的运行截图所示,当输入的线性表长度设置为12的时候,该线性表最多能输入12位数的长度。
输入要插入的数和插入数的位置下标,便可以进行插入操作;同理当输入要执行删除操作数的位置下标,可以将该数删除出线性表。
②、如下面的运行截图所示,当初始设置的线性表长度为5的时候,其5个数分别是-3、4、5、0、1。
若是要执行程序中输入的插入数字“2”,其插入数的位置在“-4”的时候,程序是不能执行插入操作的。
此时的线性表能插入的下标范围为“1——5”,明显“-4”数值<下限“1”数值,所以程序执行“error”。
③、如下面的运行截图所示,同理该线性表要插入数的位置“6”数值>上限“5”数值,所以程序执行“error”。
④、如下面的运行截图所示,初始设置的线性表插入数字2之后,要删除位置7已超过线性表的最大长度n=6,所以程序执行“error”。
⑤、如下面的运行截图所示,同理该线性表要删除数的位置“0”下标不存在,所以程序执行“error”。
二、单链表的操作(1)创建一个带头结点的单链表;(2)插入元素操作:将新元素x 插入到单链表中第i 个元素之后;(3)删除元素操作:删除单链表中值为x 的元素。
【创建操作原理】在单链表的第一个结点之前附设一个结点,称之为头结点。
头结点的数据域可以不存储任何信息,也可以存储线性表的长度等的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。
【插入操作原理】为插入数据元素x ,首先要生成一个数据域为x 的结点,然后插入在单链表中。
根据插入操作的逻辑定义,还需要修改结点a 中的指针域,令其指向结点x ,而结点x 中的指针域应指向结点b ,从而实现3个元素a 、b 和x 之间逻辑关系的变化。
假设s 为指向结点x 的指针,则上述指针修改用语描述即为:s ;next p next ->=-> s p next ->=【删除操作原理】反之,在线性表中删除元素b 时,为在单链表中实现元素a 、b 和c 之间逻辑关系的变化,仅需要修改结点a 中的指针域即可。
假设p 为指向结点a 的指针,则上述指针修改用语描述即为:;p next p next next ->=->->【NO.2代码】#include<stdio.h>#include<malloc.h>typedef struct node //定义链表{int data;struct node *next;}snode;snode* creat() //创建链表的函数{snode *head, *p, *q;head = (snode *)malloc(sizeof(snode));p = head;int x;printf("请输入创建链表的值,用“0”结束输入。
\n"); printf("x = ");scanf("%d", &x);while (x != 0){q = (snode *)malloc(sizeof(snode));q->data = x;p->next = q;p = q;printf("x = ");scanf("%d", &x);}p->next = NULL;return head;}int length(snode *head)//测链表的结点数{int i = 0;snode *p = head->next;while (p != NULL){p = p->next;i++;}return i;}void display(snode *head){snode *p = head->next;for(int i = 0; i < length(head); i++){printf("%4d", p->data);p = p->next;}printf(" ");}int locate(snode *head, int x){snode *p = head->next;int i = 1;while (p != NULL && x != p->data){p = p->next;i++;}if (p == NULL)return 0;elsereturn i;}int insnode(snode *head, int x, int i) //把x插入到链表的第i的位置{int j;snode *p = head->next, *s;if(i < 1 || i > (length(head) + 1))return 0;else if (i == 1){s = (snode *)malloc(sizeof(snode));s->next = p;head->next = s;s->data = x;}else{for (j = 1; j < i - 1; j++)p = p->next;s = (snode *)malloc(sizeof(snode));s->next = p->next;p->next = s;s->data = x;}return 1;}int delnode(snode *head, int i)//删除链表中第i个结点{snode *p = head->next, *q = head;if(i < 1 || i > length(head))return 0;else if (i == 1){head->next = p->next;free(p);}else{for (int j = 1; j < i; j++){p = p->next; q = q->next;}q->next = p->next;free(p);}return 1;}void sort(snode *head) //把链表中每个结点的值按从小到大排列{snode *p, *q;int k;for(p = head->next; p != NULL; p = p->next)for(q = p->next; q != NULL; q = q->next)if (p->data > q->data){k = p->data;p->data = q->data;q->data = k;}}void insert(snode *head, int x) //在有序链表中插入x,插入后仍保持有序{snode *p = head->next, *s, *q = head;while (p != NULL && p->data < x){q = q->next;p = p->next;}s = (snode *)malloc(sizeof(snode));s->next = q->next;s->data = x;q->next = s;}void del_min_max(snode *head, int min, int max) //删除有序链表中值min到值max中的结点{snode *p = head->next, *q = head;while (p != NULL && p->data <= min){q = p;p = p->next;}while (p != NULL && p->data < max){q->next = p->next;free(p);p = q->next;}}void del_min(snode *head){snode *p = head->next, *q = head;snode *p_min, *q_min;p_min = p;q_min = q;while (p != NULL){q = p; p = p->next;if (p != NULL && p->data < p_min->data) {q_min = p_min;p_min = p;}}q_min->next = p_min->next;free(p_min);}int main(){int min, max;snode *headl = creat(); //创建链表printf("最初的链表如下:");display(headl);printf("\n\n");int num, location;printf("请输入您要查找的数:");scanf("%d", &num);if (locate(headl, num))printf("数字%d在链表中的位置为:%d\n\n", num, locate(headl, num));elseprintf("数字%d在链表中不存在!\n\n", num);printf("请分别输入您要插入到链表中的数以及想插入的位置(用空格号间隔开):");scanf("%d %d", &num, &location);if (insnode(headl, num, location)){printf("插入新值以后的链表如下:");display(headl);printf("\n\n");}else printf("输入有误!\n\n");printf("请输入您想删除的结点位置:");scanf("%d", &location);if (delnode(headl, location)){printf("删除第%d个结点后的链表如下:", location); display(headl);printf("\n\n");}elseprintf("输入有误! \n\n");}【运行截图演示】①、如下面的运行截图所示,创建带有头结点且长度为8的单链表:4、8、2、-4、-6、1、9、-1。