顺序表-链表实验报告.总结

合集下载

顺序表和链表的读后感

顺序表和链表的读后感

顺序表和链表的读后感
学完顺序表和链表之后,我就感觉像是走进了两个不同风格的小世界呢。

先说这个顺序表吧,就像是住在公寓里,每个房间都有固定的编号,大家按顺序住在里面。

数据就老老实实地一个挨着一个排排坐。

这种结构很整齐,看起来特别舒服,就像阅兵方阵一样,规规矩矩的。

查找的时候呢,如果知道位置,就像你知道朋友住在几零几房间一样,一下子就能找到。

但是啊,这公寓要是住满了想再塞个人进来,或者中间有人搬走了,后面的人要集体搬家腾地方,那可就麻烦大了。

这就好比顺序表要插入或者删除一个元素,后面的元素都得跟着动一动,这得多费劲啊。

再看看链表呢,这就像是一群人手拉手在跳舞。

每个元素就是一个舞者,除了自己的数据之外,还拉着下一个舞者的手(指针指向下一个节点)。

它可就灵活多啦,想在这个舞蹈队伍中间加个人或者拉个人出去,只要把旁边两个人的手重新拉一拉就好了,其他的人可以继续愉快地跳舞,不用像顺序表那样大动干戈。

不过呢,链表也有它的小烦恼。

要是想找队伍里的某个人,可就不能像顺序表那样直接奔着房间号去了,得从队伍开头一个一个顺着找,就像在人群里找人一样,有点麻烦。

总的来说,顺序表和链表就像是两个性格迥异的小伙伴。

顺序表老实稳重,适合那种规规矩矩、很少变动的数据存储;而链表呢,就像个调皮灵活的小精灵,对于需要经常变动数据的情况就比较拿手。

它们俩各有各的好,就看在什么场景下用谁更合适啦。

这就像生活中,不同的工具在不同的工作里发挥着自己独特的作用一样,真是特别有趣的两种数据结构呢!。

顺序表的基本操作实验报告

顺序表的基本操作实验报告

竭诚为您提供优质文档/双击可除顺序表的基本操作实验报告篇一:顺序表的基本操作--实验报告实验报告附:源程序:#include#definemaxsize100#defineerror0#defineok1typedefstruct{intelem[maxsize];intlast;}seqList;intInsList(seqList*L,inta,inti);intLocate(seqListL,inte);intDel(seqList*L,inti);voidmain(){inti,e,a;intlist1,list2;if(L.elem[st]==-1)seqListL;st=0;for(i=0;i list1=InsList(if(list1){}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",printf("插入后的顺序表为:\n");for(i=0;i list2=Locate(L,e);if(!list2)printf("该元素不存在\n");}printf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?\n");intm;scanf("%d",if(m){Del(printf("删除后的顺序表为:\n");for(i=0;iintInsList(seqList*L,inta,inti)//i位置,下标i-1{for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];in tp;if(L->last>=maxsize-1){}printf("表已满,无法插入");return(error);L->elem[i-1]=a;L->last++;return(ok );intLocate(seqListL,inte){}intDel(seqList*L,inti){}for(k=i;klast;k++)L->elem[k-1]=L->elem[k];intk ;inti=0;while((ilast--;returnok;篇二:线性表的基本操作实验报告实验一:线性表的基本操作【实验目的】学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。

链表顺序表实验报告数据结构与算法分析

链表顺序表实验报告数据结构与算法分析

数据结构与算法分析课程设计报告课题名称: 使用一个链表和顺序表构建城市数据库提交文档组号:提交文档组号: 2 2 编程学生姓名及学号:编程学生姓名及学号: 测试学生姓名及学号:测试学生姓名及学号: 报告学生姓名及学号:报告学生姓名及学号:指导指导 教 师 姓 名:名: 指导教师评阅成绩:指导教师评阅成绩: 指导教师评阅意见:. . 提交报告时间:提交报告时间: 2013 2013 2013 年年 11 11 月月 日日实验一:Implement a city database using unordered lists and link lists1. 实验的目的和要求: <1><1>采用采用C++C++的的ASCII 码文件和模块函数实现码文件和模块函数实现; ; <2><2>熟练掌握数组列表和链表列表的实现熟练掌握数组列表和链表列表的实现熟练掌握数组列表和链表列表的实现; ;<3><3>熟练掌握计算机系统的基本操作方法,了解如何编译、运行一个熟练掌握计算机系统的基本操作方法,了解如何编译、运行一个C++C++程序程序程序; ; <4><4>上机调试程序上机调试程序上机调试程序,,掌握查错、排错使程序能正确运行。

掌握查错、排错使程序能正确运行。

2. 实验的环境: 1、硬件环境:索尼笔记本电脑,Intel(R) Core(TM) i7-3632M ,8GB 内存可;内存可;2、软件环境:Windows 8 下的Microsoft Visual Studio 20082. 算法描述: 数据结构与算法分析的背景:数据结构与算法分析的背景:数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课称,而且已成数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课称,而且已成为其他理工专业的热门选修课。

数据结构实验报告顺序表和链表

数据结构实验报告顺序表和链表

实验报告课程名称数据结构实验项目实验一线性表的生成与操作题目一顺序表和链表的创建与基本操作系别___ _计算机学院 _ ______专业__ __计算机大类_ __班级/学号__(1406/2014011288)_____学生姓名 _______(孙文学)_________实验日期_(2015年10月19日)成绩_______________________指导教师黄改娟实验题目:实验一线性表的生成与操作------顺序表和链表的创建与基本操作(自己所选择实验题目,必填)一、实验目的1)掌握线性表的顺序存储和链式存储结构;2)验证顺序表及链表的基本操作的实现;(验证)3)理解算法与程序的关系,能够将算法转换为对应程序;4)体会线性表在实际应用中能够解决的问题。

(设计、综合)二、实验内容1)根据实验一题目列表,选定题目,说明题目的主要需求;2)结合所选定的题目,定义存储结构,并完成对应应用的线性表创建、插入、删除、查找等基本操作的算法描述;3)程序编码实现,并获得运行结果。

三、报告内容1)实验题目及主要存储结构定义(提示:请根据所选定题目,描述存储结构)题目:顺序表和链表的创建及基本操作顺序表我是采用数组存储的,链表是采用结构体存储的2)结合题目,说明对相应线性表的基本操作算法描述(提示:可用自然语言、流程图、伪代码等均可,要求对每一个操作,都给出具体的算法描述)基本操作:#顺序表#(1)插入:在线性表中的x位置插入y----将x位置及之后的元素都往后挪一位,将y的值赋给a[x].(2)删除:删除位置为x的元素----另y=a[x],然后x之后的元素都往前挪一位。

(3)查找:寻找值为y的元素----从a[0]开始,若a[i]==y,则返回i,否则i++。

#链表#(1)插入:当i小于要插入的位置x时,i++,插入p->data------p->next=s->next;s->next=p;(2)删除:当p->data不等于要删除的值x时,p=p->next;q=p->next;p->next=q->next;free(q);(3)查找:当p->data!=x时,p=p->next,找到之后返回p->data3)程序源码(提示:列出所编写程序的代码。

数据结构的实验报告

数据结构的实验报告

一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。

二、实验内容1. 线性表(1)顺序表1)初始化顺序表2)向顺序表插入元素3)从顺序表删除元素4)查找顺序表中的元素5)顺序表的逆序操作(2)链表1)创建链表2)在链表中插入元素3)在链表中删除元素4)查找链表中的元素5)链表的逆序操作2. 栈与队列(1)栈1)栈的初始化2)入栈操作3)出栈操作4)获取栈顶元素5)判断栈是否为空(2)队列1)队列的初始化2)入队操作3)出队操作4)获取队首元素5)判断队列是否为空3. 树与图(1)二叉树1)创建二叉树2)遍历二叉树(前序、中序、后序)3)求二叉树的深度4)求二叉树的宽度5)二叉树的镜像(2)图1)创建图2)图的深度优先遍历3)图的广度优先遍历4)最小生成树5)最短路径三、实验过程1. 线性表(1)顺序表1)初始化顺序表:创建一个长度为10的顺序表,初始化为空。

2)向顺序表插入元素:在顺序表的第i个位置插入元素x。

3)从顺序表删除元素:从顺序表中删除第i个位置的元素。

4)查找顺序表中的元素:在顺序表中查找元素x。

5)顺序表的逆序操作:将顺序表中的元素逆序排列。

(2)链表1)创建链表:创建一个带头结点的循环链表。

2)在链表中插入元素:在链表的第i个位置插入元素x。

3)在链表中删除元素:从链表中删除第i个位置的元素。

4)查找链表中的元素:在链表中查找元素x。

5)链表的逆序操作:将链表中的元素逆序排列。

2. 栈与队列(1)栈1)栈的初始化:创建一个栈,初始化为空。

2)入栈操作:将元素x压入栈中。

3)出栈操作:从栈中弹出元素。

4)获取栈顶元素:获取栈顶元素。

5)判断栈是否为空:判断栈是否为空。

(2)队列1)队列的初始化:创建一个队列,初始化为空。

2)入队操作:将元素x入队。

3)出队操作:从队列中出队元素。

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告数据结构试验报告一、引言数据结构是计算机科学中非常重要的一个概念,它用于组织和存储数据,以便能够高效地进行检索和操作。

顺序表和链表是两种常见的数据结构,它们在实际应用中都有各自的优势和局限性。

本报告将对顺序表和链表进行试验比较,以评估它们在不同场景下的性能和适合性。

二、实验目的本次试验的目的是比较顺序表和链表在插入、删除和查找操作上的性能差异,并分析其时间复杂度和空间复杂度。

通过实验结果,可以对不同场景下选择合适的数据结构提供参考。

三、实验内容1. 顺序表实验a. 创建一个包含100个元素的顺序表;b. 在表尾插入一个元素;c. 在表头插入一个元素;d. 在表的中间位置插入一个元素;e. 删除表尾的一个元素;f. 删除表头的一个元素;g. 删除表的中间位置的一个元素;h. 查找一个元素;i. 遍历整个顺序表。

2. 链表实验a. 创建一个包含100个节点的链表;b. 在链表尾部插入一个节点;c. 在链表头部插入一个节点;d. 在链表的中间位置插入一个节点;e. 删除链表尾部的一个节点;f. 删除链表头部的一个节点;g. 删除链表的中间位置的一个节点;h. 查找一个节点;i. 遍历整个链表。

四、实验结果与分析1. 顺序表实验结果a. 在表尾插入一个元素的平均时间为0.1ms;b. 在表头插入一个元素的平均时间为0.2ms;c. 在表的中间位置插入一个元素的平均时间为0.5ms;d. 删除表尾的一个元素的平均时间为0.1ms;e. 删除表头的一个元素的平均时间为0.2ms;f. 删除表的中间位置的一个元素的平均时间为0.5ms;g. 查找一个元素的平均时间为1ms;h. 遍历整个顺序表的平均时间为10ms。

2. 链表实验结果a. 在链表尾部插入一个节点的平均时间为0.2ms;b. 在链表头部插入一个节点的平均时间为0.1ms;c. 在链表的中间位置插入一个节点的平均时间为0.5ms;d. 删除链表尾部的一个节点的平均时间为0.2ms;e. 删除链表头部的一个节点的平均时间为0.1ms;f. 删除链表的中间位置的一个节点的平均时间为0.5ms;g. 查找一个节点的平均时间为2ms;h. 遍历整个链表的平均时间为5ms。

顺序表和单链表实验报告

顺序表和单链表实验报告

数据结构实验报告一、顺序表操作验证1. 实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶掌握数据结构及算法的程序实现的基本方法。

2. 实验内容⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。

3.设计与编码#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct LinearList{int *list;int size;int MaxSize;};typedef struct LinearList LIST;void InitList(LIST *L,int ms){if((L->list=(int*)malloc(ms *sizeof(int)))==NULL){ printf("内存申请错误!\n");exit(1);}L->size=0;L->MaxSize=ms;}int InsertList(LIST *L,int item,int rc) {int i;if(L->size>=L->MaxSize)return-1;if(rc<0)rc=0;if(rc>L->size)rc=L->size;for(i=L->size-1;i>=rc;i--)L->list[i+1]=L->list[i];L->list[rc]=item;L->size++;return 0;}void OutputList(LIST *L){int i;for(i=0;i<L->size;i++)printf("%d ",L->list[i]);printf("\n");int FindList(LIST *L,int item){int i;for(i=0;i<L->size;i++)if(item==L->list[i])return i;return -1;}int DeleteList1(LIST *L,int item){int i,n;for(i=0;i<L->size;i++)if(item==L->list[i])break;if(i<L->size){for(n=i;n<L->size-1;n++)L->list[n]=L->list[n+1];L->size--;return i;}return -1;int DeleteList2(LIST *L,int rc) {int i,n;if(rc<0||rc>=L->size)return -1;for(n=rc;n<L->size-1;n++) L->list[n]=L->list[n+1];L->size--;return 0;}void main(){LIST LL;int i,r;printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize); InitList(&LL,100);printf("listaddr=%p\tsize=%d\tMaxSize=%d\n",LL.list,LL.size,LL.MaxSize);while(1){printf("请输入元素值,输入0结束插入操作:");fflush(stdin);scanf("%d",&i);if(i==0)break;printf("请输入插入位置:");scanf("%d",&r);InsertList(&LL,i,r-1);printf("线性表为:");OutputList(&LL);}while(1){printf("请输入查找元素值,输入0结束查找操作:");fflush(stdin);scanf("%d",&i);if(i==0)break;r=FindList(&LL,i);if(r<0)printf("没找到\n");elseprintf("有符合条件的元素,位置为:%d\n",r+1);}while(1){printf("请输入删除元素值,输入0结束查找操作:");fflush(stdin);scanf("%d",&i);if(i==0)break;r=DeleteList1(&LL,i);if(r<0)printf("没找到\n");else{printf("有符合条件的元素,位置为:%d\n线性表为:",r+1);OutputList(&LL);}}while(1){printf("请输入删除元素位置,输入0结束查找操作:");fflush(stdin);scanf("%d",&r);if(r==0)break;i=DeleteList2(&LL,r-1);if(i<0)printf("位置越界\n");else{printf("线性表为:");OutputList(&LL);}}}4.运行结果二、单链表操作验证1. 实验目的⑴掌握线性表的链式存储结构;⑵验证单链序表及其基本操作的实现;⑶进一步掌握数据结构及算法的程序实现的基本方法。

数据结构实验报告及心得体会

数据结构实验报告及心得体会

数据结构实验报告及心得体会一、引言数据结构是计算机科学中的重要基础课程,通过实验环节的学习,我们能够更好地掌握和应用数据结构的概念、算法和操作。

本报告旨在总结和分享我们进行的数据结构实验,并提出相应的心得体会。

二、实验一:线性表的实现与应用1. 实验目的本实验旨在通过实现和应用线性表的基本操作,掌握线性表的存储结构和算法。

2. 实验内容我们选择了顺序表和链表两种线性表的实现方式,并实现了插入、删除和查找等基本操作。

通过实验,我们发现顺序表适用于元素个数较少、频繁查找的情况,而链表适用于插入和删除操作较多、元素个数不确定的情况。

3. 实验心得通过实验一,我们深刻认识到数据结构的不同实现方式对算法的影响。

选择合适的数据结构可以提高算法效率,提高程序的性能。

同时,我们也意识到了在实际应用中,根据问题的具体特点选择不同的数据结构才能得到最优解。

三、实验二:栈与队列的应用本实验旨在通过实现和应用栈和队列的基本操作,掌握栈和队列的特性及其在实际应用中的作用。

2. 实验内容我们分别实现了顺序栈、链式栈、顺序队列和链式队列,并实现了入栈、出栈、入队和出队等基本操作。

我们发现栈适用于实现回溯算法、递归算法等,而队列适用于广度优先搜索、线程池等场景。

3. 实验心得通过实验二,我们进一步理解了栈和队列在实际编程中的运用。

它们提供了方便的数据结构,帮助我们解决了许多实际问题。

同时,实验过程中,我们也发现了栈溢出的问题,意识到了合理管理栈空间的重要性。

四、实验三:树与二叉树的实现与应用1. 实验目的本实验旨在通过实现和应用树和二叉树的基本操作,掌握树和二叉树的存储结构和算法。

2. 实验内容我们实现了树和二叉树的基本操作,包括创建、插入、删除和遍历等。

通过实验,我们发现树在表示具有部分层次结构的问题时更合适,而二叉树在表示递归结构时更加方便。

通过实验三,我们深入理解了树和二叉树的特性及其应用。

树和二叉树是许多高级数据结构的基础,熟练掌握它们的操作对于解决实际问题非常重要。

顺序表实验总结

顺序表实验总结

顺序表实验总结顺序表是数据结构中最基础的一种,它可以存储一组相同类型的数据,并且具有顺序性。

在进行实验的过程中,我对顺序表的构建、操作以及其在实际应用中的性能表现有了更深入的了解。

以下是我对顺序表实验的总结与心得。

一、顺序表构建与基本操作在实验中,我通过数组的方式构建了顺序表。

首先,我需要定义一个固定大小的数组来存储数据,然后使用指针来指示当前数据的末尾位置。

通过这种方式,我能够方便地通过下标来访问和修改数据,同时还可以通过指针来动态调整数组的大小。

在进行实验过程中,我熟练掌握了顺序表的基本操作,如插入、删除、查找等。

这些基本操作是对顺序表进行增加、删除和查找数据的关键操作,能够有效地操作顺序表中的数据。

二、顺序表与其他数据结构的比较在实验中,我也对顺序表与其他数据结构进行了比较。

相比于链表这样的动态数据结构,顺序表具有更好的随机存取性能,可以通过下标直接访问数据,而链表则需要通过指针进行遍历。

此外,顺序表的内存利用率更高,不需要额外的指针空间来存储下一个节点的地址。

但是顺序表的插入和删除操作相对耗时,需要进行数据的移动操作,而链表的插入和删除则更为方便。

三、顺序表在实际应用中的性能分析顺序表可以广泛应用于各种实际场景中,如数据库系统中的数据表、线性代数中的矩阵运算等。

在实验中,我对顺序表在实际应用中的性能进行了分析。

首先,顺序表的随机存取性能非常优秀。

通过下标可以直接访问数据,无需进行遍历操作,因此在需要频繁进行数据访问的场景下,顺序表的性能优势明显。

其次,顺序表适用于读操作频率远大于写操作的场景。

由于插入和删除操作需要进行数据的移动,因此在写操作频率较高的情况下,顺序表的性能会受到较大的影响。

最后,顺序表的空间复杂度较高。

由于顺序表需要预先分配一定的空间,因此在数据量较大或者变化不确定的情况下,可能会造成空间的浪费。

综上所述,顺序表是一种性能较优的数据结构,能够在实际应用中发挥重要的作用。

通过对顺序表实验的总结与学习,我不仅掌握了顺序表的构建和基本操作,还深入了解了它在不同场景下的性能表现。

最新数据结构顺序表实验报告心得体会(模板11篇)

最新数据结构顺序表实验报告心得体会(模板11篇)

最新数据结构顺序表实验报告心得体会(模板11篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如合同协议、工作计划、活动方案、规章制度、心得体会、演讲致辞、观后感、读后感、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as contract agreements, work plans, activity plans, rules and regulations, personal experiences, speeches, reflections, reading reviews, essay summaries, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!最新数据结构顺序表实验报告心得体会(模板11篇)我们在一些事情上受到启发后,可以通过写心得体会的方式将其记录下来,它可以帮助我们了解自己的这段时间的学习、工作生活状态。

线性表实验报告

线性表实验报告
//输出单链表
LinkList p;
p=L->next;
while(p){
printf("%5d",p->data);
p=p->next;
}
return OK;
}
void main()
{
int i,n,k,d,e;
LinkList La,Lb;
InitList_L(La);
InitList_L(Lb);
e=L.elem[i];
for(j=i;j<=L.length;j++)
L.elem[j]=L.elem[j+1];
L.length--;
return ok;
}
int output(sqlist &L){
int i;
printf("output sqlist data:\n");
for(i=0;i<L.length;i++)
PrintList(La);
printf("\nAfter delete the list is:\n");
ListDelete_L(La,e);
PrintList(La);
printf("\n");
printf("I will insert:");
scanf("%d",&k);
ListInsert_L(La,k);
int a,j,i,m;
CLinkList p,r;
printf("Input the m(m<=20):\nm=");
scanf("%d",&m);

顺序表的操作实验报告

顺序表的操作实验报告

顺序表的操作实验报告一、实验目的。

1. 了解顺序表的基本概念和操作方法;2. 掌握顺序表的插入、删除、查找等操作;3. 熟悉顺序表的存储结构和实现方式。

二、实验内容。

1. 实现顺序表的基本操作,包括插入、删除、查找等;2. 对比顺序表和链表的优缺点;3. 分析顺序表的存储结构和实现方式。

三、实验原理。

顺序表是一种线性表的存储结构,它的特点是元素之间的逻辑顺序和物理顺序一致,即在内存中连续存储。

顺序表的基本操作包括插入、删除、查找等。

1. 插入操作,在顺序表的某个位置插入一个元素,需要将插入位置后的所有元素向后移动一个位置,然后将新元素插入到指定位置。

2. 删除操作,删除顺序表中的某个元素,需要将删除位置后的所有元素向前移动一个位置,然后将最后一个元素删除。

3. 查找操作,在顺序表中查找某个元素,需要遍历整个顺序表,逐个比较元素的值,直到找到目标元素或者遍历完整个表。

四、实验步骤。

1. 实现顺序表的基本操作,包括插入、删除、查找等;2. 编写测试用例,验证顺序表的功能和正确性;3. 对比顺序表和链表的优缺点,分析其适用场景;4. 分析顺序表的存储结构和实现方式,总结其特点和应用场景。

五、实验结果与分析。

1. 实现了顺序表的基本操作,包括插入、删除、查找等,功能正常;2. 经过测试用例验证,顺序表的功能和正确性得到了验证;3. 对比顺序表和链表的优缺点,发现顺序表的插入、删除操作效率较低,但查找操作效率较高,适合静态查找;4. 分析顺序表的存储结构和实现方式,发现其适用于元素数量较少且频繁查找的场景。

六、实验总结。

通过本次实验,我们深入了解了顺序表的基本概念和操作方法,掌握了顺序表的插入、删除、查找等操作。

同时,我们对比了顺序表和链表的优缺点,分析了顺序表的存储结构和实现方式,加深了对顺序表的理解和应用。

在今后的学习和工作中,我们将根据实验结果的分析,合理选择顺序表或链表作为数据结构,以满足不同场景下的需求。

数据结构实验报告之链表顺序表的操作

数据结构实验报告之链表顺序表的操作

数据结构实验报告之链表顺序表的操作1、编写程序实现顺序表的各种基本运算:初始化、插⼊、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。

在此基础上设计⼀个主程序完成如下功能:(1)初始化顺序表L;(2)依次在表尾插⼊a,b,c,d,e五个元素;(3)输出顺序表L;(4)输出顺序表L的长度;(5)判断顺序表L是否为空;(6)输出顺序表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插⼊元素f,之后输出顺序表L;(9)删除L的第2个元素,之后输出顺序表L;(10)销毁顺序表L。

2、编写程序实现单链表的各种基本运算:初始化、插⼊、删除、取表元素、求表长、输出表、销毁、判断是否为空表、查找元素。

在此基础上设计⼀个主程序完成如下功能:(1)初始化单链表L;(2)依次在表尾插⼊a,b,c,d,e五个元素;(3)输出单链表L;(4)输出单链表L的长度;(5)判断单链表L是否为空;(6)输出单链表L的第4个元素;(7)输出元素c的位置;(8)在第3个位置上插⼊元素f,之后输出单链表L;(9)删除L的第2个元素,之后输出单链表L;(10)销毁单链表L。

1顺序表2 #include<stdio.h>3 #include<malloc.h>4 #include<stdlib.h>56#define TRUE 17#define FALSE 08#define OK 19#define ERROR 010#define INFEASIBLE -111#define OVERFLOW -212 typedef int Status;13 typedef char ElemType;1415#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量16#define LISTINCREMENT 10 //线性表存储空间的分配增量17 typedef struct {18 ElemType *elem; //存储空间基地址19int length; //当前长度20int listsize; //当前分配的存储容量21 } SqList;2223 Status InitList_Sq(SqList &L) { //算法2.324 L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));25if (!L.elem) exit(OVERFLOW); //存储分配失败26 L.length = 0; //空表长度为027 L.listsize = LIST_INIT_SIZE; //初始存储容量28return OK;29 }//InitList_Sq3031 Status ListInsert_Sq(SqList &L, int i, ElemType e) { //算法2.432 ElemType *newbase, *p, *q;33if (i<1 || i>L.length + 1) return ERROR; //i值不合法34if (L.length >= L.listsize)35 { //当前存储空间已满,增加分配36 newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));37if (!newbase) exit(OVERFLOW); //存储分配失败38 L.elem = newbase; //新基址39 L.listsize += LISTINCREMENT; //增加存储容量40 }41 q = &(L.elem[i - 1]); //q为插⼊位置42for (p = &(L.elem[L.length - 1]); p >= q; --p) *(p + 1) = *p; //元素右移43 *q = e; //插⼊e44 ++L.length; //表长增145return OK;46 }4748void DispSqList(SqList L)49 {50int i;51for (i = 0; i < L.length; i++)52 printf("%c ", L.elem[i]);53 }5455 Status ListDelete(SqList &L, int i, ElemType &e)56 {57 ElemType *p,*q;58if ((i < 1) || (i > L.length)) return ERROR;59 p = &(L.elem[i - 1]);60 e = *p;61 q = L.elem + L.length - 1;62for (++p; p <= q; ++p)63 *(p - 1) = *p;64 --L.length;65return OK;66 } //ListDelete_Sq6768 Status GetElem(SqList L, int i, ElemType &e)69 {70if (L.length == 0 || i<1 || i>L.length)71return ERROR;72 e = L.elem[i - 1];73return OK;74 }7576int ListLength(SqList L)77 {78return(L.length);79 }8081 Status DestroyList(SqList &L)82 {83 free(L.elem);84 L.length = 0;85return OK;86 }8788 Status ListEmpty(SqList L)89 {90return(L.length == 0);91 }9293int LocateElem(SqList L, ElemType e)94 {95int i = 0;96while (i < L.length && L.elem[i] != e) i++;97if (i >= L.length) return0;98else return i + 1;99 }100101void main()102 {103 SqList h;104 ElemType e;105 InitList_Sq(h);106 ListInsert_Sq(h, h.length + 1, 'a');107 ListInsert_Sq(h, h.length + 1, 'b');108 ListInsert_Sq(h, h.length + 1, 'c');109 ListInsert_Sq(h, h.length + 1, 'd');110 ListInsert_Sq(h, h.length + 1, 'e');111 DispSqList(h);112 printf("%d\n\n",ListLength(h));113 ListEmpty(h);114if (ListEmpty(h))116 printf("Empty\n\n");117 }118else119 {120 printf("Not empty\n\n");121 }122 GetElem(h, 4, e);123 printf("%c\n", e);124 printf("%d\n",LocateElem(h, 'c'));125 ListInsert_Sq(h,3,' f');126 DispSqList(h);127 ListDelete(h, 2, e);128 DispSqList(h);129 DestroyList(h);130 }131132133134135136单链表137138139140 #include<stdio.h>141 #include<malloc.h>142 #include<stdlib.h>143144#define TRUE 1145#define FALSE 0146#define OK 1147#define ERROR 0148#define INFEASIBLE -1149#define OVERFLOW -2150 typedef int Status;151152 typedef char ElemType;153154155 typedef struct LNode {156 ElemType data;157int length;158struct LNode *next;159 }LNode, *LinkList;160161162 Status InitList_L(LinkList &L) {163 L = (LinkList)malloc(sizeof(LNode));164 L->next = NULL;165return OK;166 }167168 Status ListInsert_L(LinkList L, int i, ElemType e) { 169 LinkList p = L,s;170int j = 0;171while (p && j < i - 1)172 {173 p = p->next;174 ++j;175 }176if (!p || j > i - 1)177 {178return ERROR;179 }180else181 {182 s = (LinkList)malloc(sizeof(LNode));183 s->data = e;184 s->next = p->next;185 p->next = s;186return OK;187 }188 }189190void DispList_L(LinkList L)191 {192 LinkList p = L->next;193while (p != NULL)194 {195 printf("%c\n", p->data);196 p = p->next;197 }198200201void DestoryList(LinkList &L)202 {203 LinkList p = L, q = p->next;204while (q != NULL)205 {206 free(p);207 p = q;208 q = p->next;209 }210 free(p);211 }212213 Status ListLength_L(LinkList L) {214 LinkList p = L; int n = 0;215while (p->next != NULL)216 {217 n++;218 p = p->next;219 }220return (n);221 }222223 Status ListDelete(LinkList L, int i, ElemType &e){ 224int j;225 LinkList p, q;226 p = L;227 j = 1;228while (p->next && j < i)229 {230 p = p->next;231 ++j;232 }233if (!(p->next) || j > i)234 {235return ERROR;236 }237 q = p->next;238 p->next = q->next;239 e = q->data;240 free(q);241return OK;242 }243244 Status ListEmpty_L(LinkList L)245 {246return(L->length == 0);247 }248249 Status GetElem(LinkList L, int i, ElemType &e) 250 {251int j;252 LinkList p;253 p = L->next;254 j = 1;255while (p&&j<i)256 {257 p = p->next;258 ++j;259 }260if (!p || j > i)261 {262return ERROR;263 }264 e = p->data;265return OK;266 }267268 Status LocateElem(LinkList L, int e)269 {270 LinkList p = L;271int n=0;272//p->length = 0;273while (p != NULL)274 {275if(p->data != e)276 {277 p = p->next;278 n++;279 }280else281 {282break;283 }284 }285if(p != NULL)286 {287return n;288 }289else290 {291return ERROR;292 }293 }294295void main()296 {297 LinkList h;298 ElemType e;299 InitList_L(h);300 ListInsert_L(h, 1, 'a');301 ListInsert_L(h, 2, 'b');302 ListInsert_L(h, 3, 'c');303 ListInsert_L(h, 4, 'd');304 ListInsert_L(h, 5, 'e');305 DispList_L(h);306 printf("%d\n", ListLength_L(h)); 307if (ListEmpty_L(h))308 {309 printf("Empty\n\n");310 }311else312 {313 printf("Not empty\n\n");314 }315 GetElem(h, 4, e);316 printf("%c\n", e);317 printf("%d\n", LocateElem(h, 'c')); 318 ListInsert_L(h, 3, 'f');319 DispList_L(h);320 ListDelete(h, 2, e);321 DispList_L(h);322 DestoryList(h);323 }。

数据结构实验报告链表

数据结构实验报告链表

数据结构实验报告链表
《数据结构实验报告:链表》
在计算机科学领域,数据结构是一门重要的课程,它对于计算机程序的设计和性能有着至关重要的作用。

其中,链表是一种常见的数据结构,它在实际应用中有着广泛的用途。

在本次实验中,我们将深入研究链表这一数据结构,并通过实验来验证其性能和应用。

首先,我们需要了解链表的基本概念。

链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

相比于数组,链表具有动态的内存分配和插入/删除操作的优势,但在访问元素时性能稍逊色。

因此,链表适用于需要频繁插入/删除操作的场景。

在本次实验中,我们将实现一个简单的链表数据结构,并进行一系列的操作。

首先,我们将实现链表的创建、插入、删除和遍历等基本操作,并通过实验验证其正确性和性能。

其次,我们将对比链表和数组在不同场景下的性能差异,以便更好地理解链表的适用场景和特点。

通过本次实验,我们将深入了解链表这一数据结构的原理和应用,掌握其基本操作和性能特点,为今后的程序设计和优化提供重要的参考。

同时,我们也将通过实验数据和分析来验证链表的优势和不足,为选择合适的数据结构提供依据。

希望本次实验能够为大家对数据结构和算法有更深入的理解和掌握提供帮助。

通过本次实验,我们对链表这一数据结构有了更深入的了解,并通过实验验证了其性能和应用。

链表作为一种常见的数据结构,在实际应用中有着广泛的用途,掌握其原理和操作对于程序设计和性能优化至关重要。

希望本次实验能够
为大家对数据结构和算法有更深入的理解和掌握提供帮助。

数据结构实验一顺序表实验报告

数据结构实验一顺序表实验报告

数据结构实验一顺序表实验报告数据结构实验一顺序表实验报告一、实验目的顺序表是一种基本的数据结构,本次实验的目的是通过实现顺序表的基本操作,加深对顺序表的理解,并掌握顺序表的插入、删除、查找等操作的实现方法。

二、实验内容1. 实现顺序表的创建和初始化操作。

2. 实现顺序表的插入操作。

3. 实现顺序表的删除操作。

4. 实现顺序表的查找操作。

5. 实现顺序表的输出操作。

三、实验步骤1. 创建顺序表的数据结构,包括数据存储数组和记录当前元素个数的变量。

2. 初始化顺序表,将当前元素个数置为0。

3. 实现顺序表的插入操作:- 判断顺序表是否已满,若已满则输出错误信息。

- 将插入位置之后的元素依次后移一位。

- 将要插入的元素放入插入位置。

- 当前元素个数加一。

4. 实现顺序表的删除操作:- 判断顺序表是否为空,若为空则输出错误信息。

- 判断要删除的位置是否合法,若不合法则输出错误信息。

- 将删除位置之后的元素依次前移一位。

- 当前元素个数减一。

5. 实现顺序表的查找操作:- 遍历顺序表,逐个比较元素值与目标值是否相等。

- 若找到目标值,则返回该元素的位置。

- 若遍历完整个顺序表仍未找到目标值,则返回错误信息。

6. 实现顺序表的输出操作:- 遍历顺序表,逐个输出元素值。

四、实验结果经过实验,顺序表的各项操作均能正确实现。

在插入操作中,可以正确将元素插入到指定位置,并将插入位置之后的元素依次后移。

在删除操作中,可以正确删除指定位置的元素,并将删除位置之后的元素依次前移。

在查找操作中,可以正确返回目标值的位置。

在输出操作中,可以正确输出顺序表中的所有元素。

五、实验总结通过本次实验,我深入了解了顺序表的原理和基本操作,并通过实际编程实现了顺序表的各项功能。

在实验过程中,我遇到了一些问题,如如何判断顺序表是否已满或为空,如何处理插入和删除位置的合法性等。

通过查阅资料和与同学讨论,我解决了这些问题,并对顺序表的操作有了更深入的理解。

数据结构实验报告顺序表

数据结构实验报告顺序表

数据结构实验报告顺序表数据结构实验报告:顺序表摘要:顺序表是一种基本的数据结构,它通过一组连续的存储单元来存储线性表中的数据元素。

在本次实验中,我们将通过实验来探索顺序表的基本操作和特性,包括插入、删除、查找等操作,以及顺序表的优缺点和应用场景。

一、实验目的1. 理解顺序表的概念和特点;2. 掌握顺序表的基本操作;3. 了解顺序表的优缺点及应用场景。

二、实验内容1. 实现顺序表的初始化操作;2. 实现顺序表的插入操作;3. 实现顺序表的删除操作;4. 实现顺序表的查找操作;5. 对比顺序表和链表的优缺点;6. 分析顺序表的应用场景。

三、实验步骤与结果1. 顺序表的初始化操作在实验中,我们首先定义了顺序表的结构体,并实现了初始化操作,即分配一定大小的存储空间,并将表的长度设为0,表示表中暂时没有元素。

2. 顺序表的插入操作接下来,我们实现了顺序表的插入操作。

通过将插入位置后的元素依次向后移动一位,然后将新元素插入到指定位置,来实现插入操作。

我们测试了在表中插入新元素的情况,并验证了插入操作的正确性。

3. 顺序表的删除操作然后,我们实现了顺序表的删除操作。

通过将删除位置后的元素依次向前移动一位,来实现删除操作。

我们测试了在表中删除元素的情况,并验证了删除操作的正确性。

4. 顺序表的查找操作最后,我们实现了顺序表的查找操作。

通过遍历表中的元素,来查找指定元素的位置。

我们测试了在表中查找元素的情况,并验证了查找操作的正确性。

四、实验总结通过本次实验,我们对顺序表的基本操作有了更深入的了解。

顺序表的插入、删除、查找等操作都是基于数组的操作,因此在插入和删除元素时,需要移动大量的元素,效率较低。

但是顺序表的优点是可以随机访问,查找效率较高。

在实际应用中,顺序表适合于元素数量不变或变化不大的情况,且需要频繁查找元素的场景。

综上所述,顺序表是一种基本的数据结构,我们通过本次实验对其有了更深入的了解,掌握了顺序表的基本操作,并了解了其优缺点及应用场景。

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告一、实验目的本次实验的主要目的是深入理解和掌握数据结构中线性表的基本概念、存储结构和操作算法,并通过实际编程实现来提高对线性表的应用能力和编程技能。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

三、实验内容(一)线性表的顺序存储结构顺序表是用一组地址连续的存储单元依次存储线性表的数据元素。

其特点是逻辑上相邻的元素在物理位置上也相邻,便于随机存取,但插入和删除操作需要移动大量元素,效率较低。

(二)线性表的链式存储结构链表是通过指针将一组零散的存储单元链接成一个线性序列。

常见的链表有单链表、双向链表和循环链表。

链表的插入和删除操作只需修改指针,无需移动元素,但随机存取效率较低。

(三)线性表的基本操作实现1、初始化线性表2、销毁线性表3、清空线性表4、判断线性表是否为空5、获取线性表的长度6、获取指定位置的元素7、查找指定元素在线性表中的位置8、在线性表指定位置插入元素9、删除线性表指定位置的元素四、实验步骤(一)顺序表的实现1、定义顺序表的结构体,包括数据存储数组和表的长度。

2、实现顺序表的初始化函数,分配初始存储空间并设置表长度为0。

3、销毁顺序表函数,释放存储空间。

4、清空顺序表函数,将表长度置为 0。

5、判断顺序表是否为空,根据表长度判断。

6、获取顺序表长度,直接返回表长度。

7、获取指定位置元素,检查位置合法性后返回对应元素。

8、查找指定元素位置,遍历表进行比较。

9、插入元素函数,检查插入位置合法性,若合法则移动后续元素,插入新元素并更新表长度。

10、删除元素函数,检查删除位置合法性,若合法则移动后续元素,更新表长度。

(二)链表的实现1、定义链表节点结构体,包含数据域和指针域。

2、实现链表的初始化函数,创建头节点。

3、销毁链表函数,遍历链表释放节点内存。

4、清空链表函数,遍历链表删除节点但保留头节点。

5、判断链表是否为空,检查头节点的指针域是否为空。

链表实验报告总结

链表实验报告总结

链表实验报告总结链表实验报告总结篇一:顺序表,链表总结实验报告实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include#include#include#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L)//{int k,n;char q;printf("请输入,输入学生的个数:\n"); fflush(stdin);scanf("%d",&n);for(k=0;k {printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj); 建立表格}。

数据结构实验报告_单链表

数据结构实验报告_单链表

数据结构实验报告_单链表【实验目的】1、顺序表的基本操作及c语言实现【实验要求】1、用c语言建立自己的线性表结构的程序库,实现顺序表的基本操作。

2、对线性表表示的集合,集合数据由用户从键盘输入(数据类型为整型),建立相应的顺序表,且使得数据按从小到大的顺序存放,将两个集合的并的结果存储在一个新的线性表集合中,并输出。

【实验内容】1、根据教材定义的顺序表机构,用c语言实现顺序表结构的创建、插入、删除、查找等操作;2、利用上述顺序表操作实现如下程序:建立两个顺序表表示的集合(集合中无重复的元素),并求这样的两个集合的并。

【实验结果】[实验数据、结果、遇到的问题及解决]一.statusinsertorderlist(sqlist&va,elemtypex){}二.statusdeletek(sqlist&a,inti,intk){//在非递减的顺序表va中插入元素x并使其仍成为顺序表的算法inti;if(v==ze)return(overflow);for(i=v;i>0,x }//注意i的编号从0开始intj;if(i<0||i>-1||k<0||k>-i)returninfeasible;for(j=0;j<=k;j++)[j+i]=[j+i+k];=-k;returnok;三.//将合并逆置后的结果放在c表中,并删除b表statuslistmergeoppose_l(linklist&a,linklist&b,linklist& c){linklistpa,pb,qa,qb;pa=a;pb=b;qa=pa;qb=pb;//保存pa的前驱指针//保存pb的前驱指针pa=pa->next;pb=pb->next;a->next=null;c=a;while(pa&&pb){}whi le(pa){}qa=pa;pa=pa->next;qa->next=a->next;a->next=qa;if(pa ->datadata){}else{}qb=pb;pb=pb->next;qb->next=a->next;//将当前最小结点插入a表表头a->next=qb;qa=pa;pa=pa->next;qa->next=a->next;//将当前最小结点插入a表表头a->next=qa;}}pb=b;free(pb);returnok;qb=pb;pb=pb->next;qb->next=a->n ext;a->next=qb;顺序表就是把线性表的元素存储在数组中,元素之间的关系直接通过相邻元素的位置来表达。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include <stdio.h>#include <string.h>#include<stdlib.h>#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L) //建立表格{int k,n;char q;printf("请输入,输入学生的个数:\n");fflush(stdin);scanf("%d",&n);for(k=0;k<=n-1;k++){printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj);}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;k<L->length;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s %d\n",L->data[k].xh,L->data[k].xm,L->da ta[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;}else if((i<0)||(i>L->length)){printf("程序溢出,不符合");return 0;}else{for(j=L->length-1;j>=i;j--){strcpy(L->data[j+1].xh,L->data[j].xh);strcpy(L->data[j+1].xm,L->data[j].xm);L->data[j+1].cj=L->data[j].cj;}strcpy(L->data[i].xh,xs->xh);strcpy(L->data[i].xm,xs->xm);L->data[i].cj=xs->cj;L->length=L->length+1;}return 0;}int cz(SqList *L) //查找信息{char xh[40];char xm[40];int cj;int i=0,u;printf(" 1、按学号查询 \n");printf(" 1、按姓名查询 \n");printf(" 1、按成绩查询 \n");printf("请选择:");fflush(stdin);scanf("%d",&u);if (u==1){printf("请输入要查找学生的学号:");scanf("%s",xh);for(i=0;i<L->length;i++){if(strcmp(L->data[i].xh,xh)==0)return i;}}if (u==2){printf("请输入要查找学生的姓名:");scanf("%s",xm);for(i=0;i<L->length;i++){if(strcmp(L->data[i].xm,xm)==0)return i;}}if (u==3){printf("请输入要查找学生的成绩:");scanf("%s",cj);for(i=0;i<L->length;i++){if(L->data[i].cj,&cj)return i;}}return -1;//*如果没找到,返回-1}int cz2(SqList *L) //删除查找的函数{char xh[40];char xm[40];int i=0,h;printf(" 1、按学号删除 \n");printf(" 2、按姓名删除 \n");printf("请选择:");fflush(stdin);scanf("%d",&h);if (h==1){printf("请输入要删除学生的学号:");scanf("%s",xh);for(i=0;i<L->length;i++){if(strcmp(L->data[i].xh,xh)==0) //判断输入和已知学号一样不return i;}}else if (h==2){printf("请输入要删除学生的姓名:");scanf("%s",xm);for(i=0;i<L->length;i++){if(strcmp(L->data[i].xm,xm)==0) //判断输入姓名和已知姓名一样不return i;}}return -1;}void sc(SqList *L) //删除函数{int i,j;printf("请先选择您要删除的学生信息的方式:\n");scanf("%d",&j);i=cz2(L);if(i==-1){printf("没有查到要删除的学生信息");return;}for(j=i;j<L->length;j++) // 要删除学生以后的学生整体上调一位{L->data[j].cj=L->data[j+1].cj; //就是后一个覆盖了前一个strcpy(L->data[j].xh,L->data[j+1].xh);strcpy(L->data[j].xm,L->data[j+1].xm);}L->length--;printf("该学生信息已被删除!\n");}int bc(SqList *L){return (L->length);}int main() //主体大函数{int i,k;SqList *L; //定义顺序表的指针DataType *xs;L=(SqList *)malloc(sizeof(SqList)*MaxSize);char q;ee:rewind(stdin);{printf(" 学生管理系统 \n"); //函数的各个结构printf(" \n");printf(" \n");printf(" \n");printf(" 建立表格请输入1 \n");printf(" 求表长请输入2 \n");printf(" 插入请输入3 \n");printf(" 查找请输入4 \n");printf(" 删除请输入5 \n");printf(" 列表请输入6 \n");printf(" 退出请按0 \n");printf(" 请输入");scanf("%c",&q);}if(q=='1'){rewind(stdin);liebiao(L);goto ee;}if(q=='2'){rewind(stdin);bc(L);printf("共%d个学生\n",L->length);goto ee;}if(q=='3'){rewind(stdin);printf(" 插入 \n");printf("\t\t 请输入要添加的学生信息: \n");xs=(DataType *)malloc(sizeof(DataType));printf("请输入学生学号\n");scanf("%s",xs->xh);printf("请输入学生名字\n");scanf("%s",xs->xm);printf("请输入学生成绩\n");scanf("%d",&xs->cj);printf("请输入要插入的位置:\n");rewind(stdin);scanf("%d",&i);cr(L,xs,i);goto ee;}if(q=='4'){rewind(stdin);printf(" 查找 \n");printf(" 查询学生信息 \n");i=cz(L);if(i!=-1){printf("%s %s %d\n",L->data[i].xh,L->data[i].x m,L->data[i].cj);}else{printf("信息不存");}goto ee;}if(q=='5'){rewind(stdin);printf(" 删除 \n"); printf(" 删除学生信息 \n");sc(L);goto ee;}if(q=='6'){rewind(stdin);printf(" 列表 \n");qb(L);goto ee;}if(q=='0') {printf("谢谢使用\n");}if(!(q=='1'||q=='2'||q=='3'||q=='4'||q=='5'||q=='5'||q=='0 ')){goto ee;}system ("pause");return 0;}建表:否是否实验目的:学生管理系统(链表)实验要求:1.建表2.删除3.列表4.退出源程序:#include<stdio.h>#include<string.h>#include<stdlib.h>struct xuesheng{char xh[7];char xm[40];int cj;struct xuesheng *next;};struct xuesheng *cha_ru(struct xuesheng *x){struct xuesheng *p,*q;int c;do{if(x==0){ x=(struct xuesheng *)malloc(sizeof(struct xuesheng));printf("input xh:"); scanf("%s",(*x).xh);printf("input xm:"); scanf("%s",(*x).xm);printf("input cj:"); scanf("%d",&(*x).cj);(*x).next=0; }else{ p=x;while((*p).next!=0){p=(*p).next;};q=(struct xuesheng *)malloc(sizeof(struct xuesheng));printf("input xh:"); scanf("%s",(*q).xh);printf("input xm:"); scanf("%s",(*q).xm);printf("input cj:"); scanf("%d",&(*q).cj);(*p).next=q;(*q).next=0; }printf("ni hai ji xu me? 1/2:");scanf("%d",&c);}while(c==1);return(x);}int link_len(struct xuesheng *x){struct xuesheng *p;int l=0;p=x;if(p!=0)do{l=l+1;p=p->next;}while(p!=0);return(l);}struct xuesheng *shan_chu(struct xuesheng *x){struct xuesheng *p,*q,*t;int k,l,i;p=x;q=x;l=link_len(x);printf("input shan chu jie dian xu hao :");scanf("%d",&k);if(k<=0||k>l)printf("error data!\n");if(k==1){ x=p->next;t=p;free(t);}if(k>1&&k<=l){ for(i=1;i<=k-2;i=i+1)p=p->next;t=p->next;for(i=1;i<=k;i=i+1)q=q->next;p->next=q;free(t); }printf("vvvvvvv shan chu wan bi ! vvvvvvv\n");return(x);}void lie_biao(struct xuesheng *x){struct xuesheng *p;int l;p=x;if(p==0) printf("gai biao wei kong!\n");else do{printf("%20s% 20s%7d\n",(*p).xh,(*p).xm,(*p).cj);p=(*p).next;}while(p!=0);l=link_len(x);printf(" l=%d\n",l);}main(){struct xuesheng *s_head;int n;s_head=0;do{printf("1:cha ru\n");printf("2:cha zhao\n");printf("3:shan chu\n");printf("4:lie biao\n");printf("5:tui chu\n");printf("input 1---5:");scanf("%d",&n);switch(n){case 1: s_head=cha_ru(s_head);break; /* case 2: cha_zhao(s_head);break;*/ case 3: s_head=shan_chu(s_head);break; case 4: lie_biao(s_head);break;}}while(n==1||n==3||n==4);printf("\n");return 0;}主函数:删除:总结:顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改。

相关文档
最新文档