顺序表-数据结构与算法课程设计报告
- 格式:doc
- 大小:151.00 KB
- 文档页数:15
数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。
通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。
2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。
体会到链表在动态内存管理和灵活操作方面的优势。
(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。
2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。
(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。
2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。
(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。
2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。
(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。
2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。
四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。
删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。
《数据结构》实验报告一系别:班级:学号:姓名:日期:指导教师:一、上机实验的问题和要求:顺序表的查找、插入与删除。
设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。
具体实现要求:从键盘输入10个整数,产生顺序表,并输入结点值。
从键盘输入1个整数,在顺序表中查找该结点的位置。
若找到,输出结点的位置;若找不到,则显示“找不到”。
从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。
从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)三、源程序及注释:#include <stdio.h>/*顺序表的定义:*/#define ListSize 100 /*表空间大小可根据实际需要而定,这里假设为100*/ typedef int DataType; /*DataType可以是任何相应的数据类型如int, float或char*/ typedef struct{ DataType data[ListSize]; /*向量data用于存放表结点*/int length; /*当前的表长度*/}SeqList;/*子函数的声明*/void CreateList(SeqList * L,int n); /*创建顺序表函数*/int LocateList(SeqList L,DataType x); /*查找顺序表*/void InsertList(SeqList * L,DataType x,int i); /*在顺序表中插入结点x*/void DeleteList(SeqList * L,int i);/*在顺序表中删除第i个结点*/void PrintList(SeqList L,int n); /*打印顺序表中前n个结点*/void main(){SeqList L;int n=10,x,i; /*欲建立的顺序表长度*/L.length=0;/*调用创建线性表函数*/printf("create function:\n");CreateList(&L,n); /*建立顺序表*/PrintList(L,n); /*打印顺序表*//*调用查找函数*/printf("search function:\n");printf("input the data you want to search:");scanf("%d",&x);i=LocateList(L,x); /*顺序表查找*/if (i==0)printf("sorry,don't find %d!\n\n",x);elseprintf("i have find the %d,it locate in %d!\n\n",x,i);/*调用插入函数*/printf("Insert function:\n");printf("输入要插入的位置:(input the position:)");scanf("%d",&i);printf("输入要插入的元素:(input the data:)");scanf("%d",&x);InsertList(&L,x,i); /*顺序表插入 */PrintList(L,n); /*打印顺序表 *//*调用删除函数*/printf("delete function:\n");printf("输入要删除的位置:(input the position:)");scanf("%d",&i);DeleteList(&L,i); /*顺序表删除 */PrintList(L,n); /*打印顺序表 */}/*顺序表的建立:*/void CreateList(SeqList *L,int n){ int i;for (i=0;i<n;i++){ printf("\ninput the %d data:",i+1);scanf("%d",&(*L).data[i]);}(*L).length=n;}/*顺序表的查找:*/int LocateList(SeqList L,DataType x){ int i=0;while (i<L.length&&x!=L.data[i])++i;if (i<L.length) return i+1;else return 0;}/*顺序表的插入:*/void InsertList(SeqList *L,DataType x,int i){/*将新结点x插入L所指的顺序表的第i个结点的位置上 */ int j;if (i<0||i>(*L).length){printf("插入位置非法");exit(0);}if ((*L).length>=ListSize){printf("表空间溢出,退出运行");exit(0);}for (j=(*L).length-1;j>=i-1;j--)(*L).data[j+1]=(*L).data[j]; /*顺序表元素从后向前依次后移*/ (*L).data[i-1]=x; /*将x插入第i个结点位置*/(*L).length++; /*表长自增1*/}/*顺序表的删除:*/void DeleteList(SeqList *L,int i){/*从L所指的顺序表中删除第i个结点 */int j;if (i<0 || i>(*L).length){printf("删除位置非法");exit(0);}for (j=i;j<=(*L).length-1;j++)(*L).data[j]=(*L).data[j+1]; /*顺序表自第i个结点开始,依次前移*/ (*L).length--; /*表长自减1*/}/*顺序表的打印:*/void PrintList(SeqList L,int n){ int i;printf("the sequal list data is:");for (i=0;i<n;i++)printf("%d ",L.data[i]);printf("\n\n");}四、运行输出结果:五、调试和运行程序过程中产生的问题及采取的措施:六、对算法的程序的讨论、分析,改进设想,其它经验教训:七、对实验方式、组织、设备、题目的意见和建议:。
链表顺序表实验报告--数据结构与算法分析————————————————————————————————作者:————————————————————————————————日期:数据结构与算法分析课程设计报告课题名称: 使用一个链表和顺序表构建城市数据库提交文档组号: 2编程学生姓名及学号:测试学生姓名及学号:报告学生姓名及学号:指导教师姓名:指导教师评阅成绩:指导教师评阅意见:..提交报告时间: 2013年11 月日实验一:Implement acity databaseusingunordered lists andlink lists1.实验的目的和要求:<1>采用C++的ASCII码文件和模块函数实现;<2>熟练掌握数组列表和链表列表的实现;<3>熟练掌握计算机系统的基本操作方法,了解如何编译、运行一个C++程序;<4>上机调试程序,掌握查错、排错使程序能正确运行。
2.实验的环境:1、硬件环境:索尼笔记本电脑,Intel(R)Core(TM) i7-3632M,8GB内存可;2、软件环境:Windows8下的Microsoft Visual Studio 20082.算法描述:数据结构与算法分析的背景:数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课称,而且已成为其他理工专业的热门选修课。
数据结构是一门专业选技术基础科。
一方面,它要求我们学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术;另一方面,数据结构的学习过程也是复杂程序设计的训练过程,要求我们编写的程序结构清楚和正确易读,复合软件工程的规范,并培养我们的数据抽象能力。
本次课程设计就是对数据结构中的顺序表和链表的操作的应用。
顺序表:1.顺序表的定义ﻫ(1)顺序存储方法即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。
顺序表的课程设计一、课程目标知识目标:1. 让学生掌握顺序表的基本概念和性质,理解其在数据存储和处理中的重要性。
2. 使学生学会使用顺序表进行数据的插入、删除、查找等基本操作。
3. 帮助学生理解顺序表与链表等其他数据结构的区别和联系。
技能目标:1. 培养学生运用顺序表解决实际问题的能力,如实现一个简单的学生管理系统。
2. 提高学生在编程中运用顺序表进行数据操作的能力,熟练掌握相关算法和代码实现。
情感态度价值观目标:1. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。
2. 培养学生团队合作意识,学会在项目中分工协作,共同解决问题。
3. 引导学生认识到数据结构在实际应用中的价值,提高解决实际问题的能力。
课程性质:本课程为计算机科学或信息技术学科的基础课程,重点培养学生的数据结构知识和编程能力。
学生特点:学生处于初中或高中年级,具备一定的编程基础,对数据结构有一定了解,但尚未深入学习顺序表。
教学要求:结合学生特点,采用案例教学法和任务驱动法,注重理论与实践相结合,使学生在掌握顺序表知识的同时,提高编程实践能力。
在教学过程中,关注学生的情感态度价值观培养,引导他们形成积极的学习态度和良好的团队协作精神。
通过分解课程目标为具体学习成果,为教学设计和评估提供明确依据。
二、教学内容1. 顺序表的定义与性质:介绍顺序表的概念、存储结构特点及其在数据存储中的应用场景。
- 教材章节:第一章 数据结构概述,第三节 顺序表- 内容:顺序表的定义、顺序存储结构、优缺点分析。
2. 顺序表的基本操作:讲解顺序表中的插入、删除、查找等基本操作原理及实现方法。
- 教材章节:第二章 线性表,第一节 顺序表的基本操作- 内容:顺序表的初始化、插入、删除、按位置查找、按值查找等操作。
3. 顺序表的应用实例:通过案例分析,使学生了解顺序表在实际编程中的应用。
- 教材章节:第二章 线性表,第二节 顺序表的应用- 内容:学生管理系统实例,实现学生信息插入、删除、查询等功能。
实验报告课程数据结构及算法实验项目 1.顺序表的建立和基本运算成绩专业班级*** 指导教师***姓名*** 学号*** 实验日期***实验一顺序表的建立和基本运算一、实验目的1、掌握顺序表存储结构的定义及C/C++语言实现2、掌握顺序表的各种基本操作及C/C++语言实现3、设计并实现有序表的遍历、插入、删除等常规算法二、实验环境PC微机,Windows,DOS,Turbo C或者Visual C++三、实验内容1、顺序表的建立和基本运算(1)问题描述顺序表时常进行的运算包括:创建顺序表、销毁顺序表、求顺序表的长度、在顺序表中查找某个数据元素、在某个位置插入一个新数据元素、在顺序表中删除某个数据元素等操作。
试编程实现顺序表的这些基本运算。
(2)基本要求实现顺序表的每一个运算要求用一个函数实现。
(3)算法描述参见教材算法2.3、算法2.4、算法2.5等顺序表的常规算法。
(4)算法实现#include<malloc.h> // malloc()等#include<stdio.h> // NULL, printf()等#include<process.h> // exit()// 函数结果状态代码#define OVERFLOW -2#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; // Boolean是布尔类型,其值是TRUE或者FALSE//-------- 线性表的动态分配顺序存储结构-----------#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量#define LIST_INCREMENT 2 // 线性表存储空间的分配增量typedef int ElemType;struct SqList{ElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(int)为单位)};void InitList(SqList &L) // 算法2.3{ // 操作结果:构造一个空的顺序线性表LL.elem=new ElemType[LIST_INIT_SIZE];if(!L.elem)exit(OVERFLOW); // 存储分配失败L.length=0; // 空表长度为0L.listsize=LIST_INIT_SIZE; // 初始存储容量}void DestroyList(SqList &L){ // 初始条件:顺序线性表L已存在。
顺序表课程设计一、课程目标知识目标:1. 学生能理解顺序表的概念,掌握顺序表的存储结构和操作方法。
2. 学生能描述顺序表在计算机科学中的应用,了解其优势和局限性。
3. 学生能运用顺序表解决实际问题,如数据存储、查询和排序等。
技能目标:1. 学生能通过编程实践,掌握顺序表的基本操作,如插入、删除、查找等。
2. 学生能运用顺序表实现简单的排序算法,如冒泡排序、选择排序等。
3. 学生能分析实际问题,选择合适的顺序表结构进行数据组织和管理。
情感态度价值观目标:1. 学生培养对数据结构和算法的兴趣,认识到其在中小学计算机学科中的重要性。
2. 学生培养合作意识和团队精神,通过小组讨论和实践,共同解决问题。
3. 学生养成编程思维,提高逻辑思维能力和问题解决能力。
课程性质:本课程为计算机科学学科的基础课程,以顺序表为核心,结合编程实践,培养学生的数据结构和算法素养。
学生特点:学生为初中年级,已具备一定的计算机操作基础,对编程有一定了解,但尚未深入学习数据结构。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,突出操作性和实用性,以激发学生的学习兴趣和动手能力。
通过本章节学习,使学生能够掌握顺序表的基本知识,提高编程技能,培养良好的编程习惯和团队合作精神。
后续教学设计和评估将围绕课程目标,分解具体学习成果,确保学生达到预期学习效果。
二、教学内容1. 顺序表的概念与存储结构- 顺序表的定义与特点- 顺序表的存储方式- 顺序表的优缺点分析2. 顺序表的操作方法- 插入操作:掌握在顺序表的指定位置插入元素的方法- 删除操作:掌握从顺序表中删除指定位置元素的方法- 查找操作:掌握顺序表中的线性查找和二分查找方法- 更新操作:掌握修改顺序表中指定位置元素的方法3. 顺序表的应用实例- 数据存储:使用顺序表存储一组数据,并进行操作- 排序算法:运用顺序表实现冒泡排序和选择排序- 简单计算器:使用顺序表存储计算过程中的数据,实现基本运算功能4. 教学内容的安排与进度- 第一课时:介绍顺序表的概念、存储结构及优缺点- 第二课时:讲解顺序表的插入、删除、查找和更新操作- 第三课时:通过实例分析,展示顺序表在实际编程中的应用- 第四课时:学生编程实践,巩固顺序表的操作方法教材章节关联:教学内容与教材中关于数据结构的第一章“线性表”相关,重点涉及顺序表的定义、操作和应用。
《算法与数据结构》课程实验报告一、实验目的1、实现线性表的顺序存储结构。
2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之间的相互关系及各自的作用。
3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现。
二、实验内容及要求对顺序存储的线性表进行一些基本操作。
主要包括:(1)插入:操作方式为在指定元素前插入、在指定元素之后插入、在指定位置完成插入。
(2)删除:操作方式可分为删除指定元素、删除指定位置的元素等,尝试实现逻辑删除操作。
(3)显示数据。
(4)查找:查询指定的元素(可根据某个数据成员完成查询操作)。
(5)定位操作:定位指定元素的序号。
(6)更新:修改指定元素的数据。
(7)数据文件的读写操作等。
其它操作可根据具体需要自行补充。
要求线性表采用类的定义,数据对象的类型自行定义。
三、系统分析(1)数据方面:能够实现多种数据类型顺序表的创建,并进行操作,不同的数据类型数据使用不同的文本文件保存。
(2)功能方面:能够实现线性表的一些基本操作,主要包括:1.计算表最大可以容纳表项个数以及当前表的当前长度。
2.能够进行添加操作,在已有的数据文件中进行数据的添加。
3.能够进行搜索操作,返回搜索项在表中表项序号4.能够进行定位操作,定位到表中合理位置。
5.能够进行取值操作,根据用户需求取出表中某项的值。
6.能够进行修改操作,在用户选择修改项后将重新输入内容修改到对应位置。
7.能够进行插入操作,在用户选择合理位置并输入插入内容后即可。
8.能够进行删除操作,用户根据选择表中项数删除对应数据。
9.能够进行判断表空或表满。
四、系统设计(1)设计的主要思路根据实验要求,首先将顺序表模板类完成,并将需要实现的功能代码完善,在写实现各个功能的菜单并将模板类实例化为简单数据类型最后进行调试,由于还需使得顺序表能够存储自定义的学生类类型数据,故根据要求写出Student类,并将之前所写得模板类用学生类数据类型实例化,再进行调试。
合肥学院计算机科学与技术系课程设计报告2003~2014学年第二学期课程数据结构与算法课程设计名称设计顺序表结构的相关函数库学生姓名学号专业班级 1指导教师李红、陈艳平2014 年9月一、问题分析和任务定义1.1题目:设计顺序表结构的相关函数库,以便在程序设计中调用。
要求:(1)实现顺序表的各种基本函数以及常用函数;(2)给出1-2个例子,通过调用自己的库函数来实现问题的求解。
1.2要求:实现顺序表的各种基本函数以及常用函数;给出1-2个例子,通过调用自己的库函数来实现问题的求解。
1.3具体任务:设计出顺序表结构的相关函数库,以便在程序设计中调用。
2、实现功能:设计顺序表的相关函数,以便在程序调用中调用,进行顺序表中元素的插入、查找、取出、删除等操作。
3、测试用例:3.1正确数据:请正确输入4个元素:1 2 3 4请选择:1:显示所有元素2:增加一个元素3:按数值删除某个元素4:按位置删除某个元素5:按位置更新6:按数值更新7:按位置查找某元素8:按值查找某元素9:退出程序3需要删除的元素:4显示结果为:1 2 33.2错误数据:请正确输入4个元素:1 5 4 2请选择:1:显示所有元素2:增加一个元素3:按数值删除某个元素4:按位置删除某个元素5:按位置更新6:按数值更新7:按位置查找某元素8:按值查找某元素9:退出程序4需要输入删除的位置:2显示结果为:1 5 4问题分析: 本题用顺序表结构的相关函数库,以便在程序设计中调用。
程序中主要是调用子函数来实现各种功能,同时用switch来进行选操作,从而实现题目说要求的各种功能。
二、数据结构的选择和概要设计(1)为了实现上述程序功能,需要定义一个简化的线性表抽象数据类型:基本操作:SqLsetnull (L)操作前提:L是一个未初始化的线性表操作结果:将L初始化为一个空的线性表操作前提:L是一个已初始化的空表操作结果:建立一个非空的线性表LSqLinsert (L,s,i)操作前提:线性表L已存在操作结果:将元素s插入到线性表L的i位置SqLdelete (L,i)操作前提:线性表L已存在操作结果:将线性表L中i位置的元素删除,SqLlocate (L,x)操作前提:线性表L已存在操作结果:在线性表L中查找元素x,若存在,返回元素在表中的序号位置;若不存在,返回-1SqLlength_L(L)初始条件:线性表L已存在操作结果:返回L中数据元素个数SqLget (L,i)初始条件:线性表L 已存在操作结果:判断第i 个数据元素值是否存在,存在则返回1;否则,返回0;(2) 本程序包含10个函数:• 主函数main()• 初始化顺序表函数SqLsetnull ()• 显示顺序表内容函数print ()• 插入元素函数SqLinsert ()• 删除元素函数SqLdelete ()• 查找元素函数SqLlocate ()• 取值函数SqLget ()• 判表满各函数间调用关系如下:( 3 ) 主函数的代码main(){ 说明一个单链表 L ;初始化 L ;建立 L ;显示 L ;}顺序表函数库清单3、详细设计和编码详细设计:main SqLsetnull print SqLinsert SqLupdate SqLdelete Delete_x SqLlocate SqLget Update_x SqLempty1)类型定义:typedef struct{ Datatype data[maxlen];int last;}Sequenlist; /*将data和len封装成一个结构体*/ 2)顺序表初始化:Sequenlist *SqLsetnull(){Sequenlist *L;L=(Sequenlist*)malloc(sizeof(Sequenlist));L->last=-1;return(L);}3)子函数输出函数void print(Sequenlist *L){int h;printf("显示结果为: ");for(h=0;h<L->last+1;h++){printf("%d ",L->data[h]);}/*输出顺序表中所有元素*/printf("\n");}判表满int SqLempty(Sequenlist *L){if(L->last+1>=50)return(1);elsereturn(0);}插入函数int SqLinsert(Sequenlist *L,Datatype s,int i){int j;if(SqLempty(L)==1){printf("表满溢出\n");return(0);}else if(i<1||i>L->last+2){printf("位置出错\n");return(0);}else{for(j=L->last;j>=i-1;j--)L->data[j+1]=L->data[j];/*节点往后移动一个位置*/L->data[i-1]=s; /*插入新元素s*/L->last++; /*last仍指向最后一个元素*/return (1);}取数函数int SqLget(Sequenlist *L, int i){int x;if(i<1||i>L->last+1){printf("取数出错!");return (0);}elsex=L->data[i-1];return (1) ;}更新函数int SqLupdate(Sequenlist *L,int i,int s){if(i<1||i>L->last+2){printf("位置出错\n");return(0);}else{L->data[i-1]=s;return (1);}}其中用switch来做选择操作,从而实现个子函数对应的功能。
4、上机调试在调试过程中要特别注意函数调用时参数的传递问题,用数组名作为参数可进行传值调用,因而可将函数中的运行结果传递给主调函数,得出正确结果;再一个要注意的是输出结果时,循环结束的条件应为:i==’#’时退出循环。
另外,上机前的静态检查不能忽视;程序的调试过程可暂时多加一些输出语句以便及时查看一下中间运行情况,并对程序规格说明作少量调整和改动。
程序执行时出现越界的情况主要是编写程序时未考虑这方面,例如在按位置删除时超越了操作范围,必须做越界处理,后通过改正才能正确运行。
还有些常见小错误,例如执行结果间没空格或空行导致执行结果看不清。
通过这些让我认识到编写程序必须严谨,否则会出现大量的错误,甚至你自己都难以发现,导致你会花更多的时间去修改,得不偿失。
5、测试结果及其分析执行情况如下:请正确输入4个元素:1 2 3 4请选择:1:显示所有元素2:增加一个元素3:按数值删除某个元素4:按位置删除某个元素5:按位置更新6:按数值更新7:按位置查找某元素8:按值查找某元素9:退出程序3需要删除的元素:4显示结果为:1 2 3测试结果截图如下:6、用户使用说明程序执行后,首先输出:“请输入表长:”n输入表长后,输出:“请输入n个元素值:”输入n个元素值后,输出:“请选择:”任意选择指定操作的某一操作序号:如3“输入需要删除的元素”然后程序自动执行结果并显示出来图5.运行结果7、参考文献1.王昆仑,李红。
《数据结构与算法》。
北京:中国铁道出版社,2012年9月第二版2.马睿,孙丽云。
《数据结构与算法(C语言版)》。
北京:北京邮电大学出版社,2009年3.陈文博,朱青《数据结构与算法》,机械工业出版社,1996年4.许卓群,张乃孝,杨冬青,唐世渭《数据结构》,高等教育出版社,1988年5.李廉治,姜文清,郭福顺《数据结构》,大连理工大学出版社,1989年8、附录#include<stdio.h>#include<stdlib.h>#include<kuhanshu.h>main(){Sequenlist *L;int i,j,t,s,h,m,n,flag=1;L=SqLsetnull();printf("请输入表长:");scanf("%d",&i);L->last=i-1;printf("请输入%d个元素值:",i); /*确定表长*/for(t=0;t<i;t++)scanf("%d",&L->data[t]); /*输入表中元素*/while(flag) /*使用标识flag*/{printf("请选择:\n");printf("1:显示所有元素\n");printf("2:增加一个元素\n");printf("3:按数值删除某个元素\n");printf("4:按位置删除某元素\n");printf("5:按位置更改\n");printf("6:按数值更改\n");printf("7:按位置查找(取)元素\n");printf("8:按值查找一个元素\n");printf("9:退出程序\n"); /*输入顺序表元素之后显示选项*/scanf("%d",&j);switch(j) /*当输入数字j时自动调用函数库中的函数实现功能*/{case 1:{print(L);break;}case 2:{printf("输入需要插入的数值和位置:");scanf("%d %d",&s,&i);h=SqLinsert(L,s,i);if(h){printf("插入之后的线性表:"); /*显示插入元素后的顺序表*/print(L);}break;}case 3:{printf("输入需要删除的元素:");scanf("%d",&s);Delete_x(L,s); /*显示删除元素后的顺序表*/print(L);break;}case 4:{printf("输入需要删除的数值位置:");scanf("%d",&s);h=SqLdelete(L,s);printf("\n");if(h){printf("删除之后的线性表:\n"); /*显示删除元素后的顺序表*/print(L);}break;}case 5:{printf("输入需要更改的位置和更改后的数据:");scanf("%d %d",&m,&n);h=SqLupdate(L,m,n);if(h){printf("插入之后的线性表:"); /*显示更新元素后的顺序表*/print(L);}break;}case 6:{printf("输入需要更改的数");scanf("%d",&m);Update_x(L,m);print(L);break;}case 7:{printf("取出第n个元素:");scanf("%d",&i);h=SqLget(L,i);if(h){printf("所取的数据元素为:");printf("%d\n",L->data[i-1]); /*输出所取元素*/ }elseprintf("输入序号超出范围!\n"); /*输入不合法报错*/ break;}case 8:{printf("输入需要查找的数值:");scanf("%d",&s);SqLlocate(L,s);printf("\n");break;}case 9:flag=0;printf("程序结束,按任意键退出!\n");}}}库函数:(kuhanshu.h)typedef int Datatype;typedef struct{ Datatype data[50];int last;}Sequenlist;Sequenlist *SqLsetnull(){Sequenlist *L;L=(Sequenlist*)malloc(sizeof(Sequenlist));L->last=-1;return(L);}void print(Sequenlist *L){printf("显示结果为: ");for(h=0;h<L->last+1;h++){printf("%d ",L->data[h]);}/*输出顺序表中所有元素*/printf("\n");}int SqLempty(Sequenlist *L){if(L->last+1>=50)return(1);elsereturn(0);}int SqLinsert(Sequenlist *L,Datatype s,int i){int j;if(SqLempty(L)==1){printf("表满溢出\n");return(0);}else if(i<1||i>L->last+2){printf("位置出错\n");return(0);}else{for(j=L->last;j>=i-1;j--)L->data[j+1]=L->data[j];/*节点往后移动一个位置*/L->data[i-1]=s; /*插入新元素s*/L->last++; /*last仍指向最后一个元素*/ return (1);}}int SqLdelete(Sequenlist *L,int i){int j;if(L->last<0){printf("顺序表空!");return(0);else if(i<1||(i>L->last+1)) /*检查空表及删除位置的合法性*/{printf("参数出错!");return(0);}else{for(j=i;j<=L->last+1;j++)L->data[j-1]=L->data[j];L->last--;return(1);}}int SqLupdate(Sequenlist *L,int i,int s){if(i<1||i>L->last+2){printf("位置出错\n");return(0);}else{L->data[i-1]=s;return (1);}}int SqLget(Sequenlist *L, int i){int x;if(i<1||i>L->last+1){printf("取数出错!");return (0);}elsex=L->data[i-1];return (1) ;}void SqLlocate(Sequenlist *L,int x){int i,z=0;for(i=0;i<L->last+1;i++){if(L->data[i]==x){printf("该元素的位置为:%d",i+1);z=1;}}if(z==0)printf("不存在此元素!");}void Delete_x(Sequenlist *L,int x){int j,k,z=0;for(j=0;j<L->last+1;j++){if(L->data[j]==x) {for(k=j;k<L->last+1;k++){L->data[k]=L->data[k+1]; /*向前移动一个位置*/}L->last--;j--; /*返回到删除的位置*/z=1;}}if(z==0)printf("不存在此元素!");}void Update_x(Sequenlist *L,int x){int j,k,z=0,t=1;for(j=0;j<L->last+1;j++){if(L->data[j]==x){printf("将第%d次出现的数%d更改为:",t,x);scanf("%d",&k);L->data[j]=k;z=1;t++;}}if(z==0)printf("不存在此元素!"); }。