实验一 顺序表与链表 成品

合集下载

三种存储结构(顺序表,链表,静态链表)求解josuphu问题的实验报告

三种存储结构(顺序表,链表,静态链表)求解josuphu问题的实验报告

实验报告:使用三种存储结构(顺序表、链表、静态链表)求解Josephus问题一、实验目的掌握顺序表、链表和静态链表的基本操作和实现方法。

学习如何使用不同的存储结构解决同一问题,并分析其性能差异。

通过求解Josephus问题,加深对数据结构在实际问题中应用的理解。

二、实验内容问题描述:Josephus问题是著名的理论问题。

在罗马人占领乔塔帕特后,n个犹太人与他们的妻子和孩子被一个圈子所包围,圈中第一个人从1开始报数,每数到m的那个人就被杀死,然后再由他的下一个人从1开始重新报数,直到剩下最后一个人为止,那个人就被称为Josephus。

本实验要求使用顺序表、链表和静态链表三种存储结构求解Josephus问题。

顺序表求解Josephus问题:使用数组作为顺序表存储结构,通过循环遍历数组实现报数和杀人过程。

当杀死某个人时,将其后的人依次向前移动填补空位。

重复此过程直到只剩下一个人为止。

链表求解Josephus问题:使用链表作为存储结构,通过链表的遍历实现报数和杀人过程。

当杀死某个人时,将其从链表中删除。

重复此过程直到链表中只剩下一个节点为止。

静态链表求解Josephus问题:使用静态链表作为存储结构,通过数组模拟链表操作。

在静态链表中,每个节点包含数据域和游标域。

通过游标域实现节点间的链接关系。

通过遍历静态链表实现报数和杀人过程,当杀死某个人时,修改其前后节点的链接关系以删除该节点。

重复此过程直到静态链表中只剩下一个节点为止。

三、实验结果与分析实验结果:使用顺序表求解Josephus问题时,时间复杂度较高,因为每次杀人后都需要移动大量元素来填补空位。

空间复杂度较低,只需一个大小为n的数组。

使用链表求解Josephus问题时,时间复杂度较低,因为删除节点时只需修改相邻节点的指针。

空间复杂度与顺序表相当,但需要额外的指针空间来存储节点间的链接关系。

使用静态链表求解Josephus问题时,时间复杂度和空间复杂度与链表相似。

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

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

数据结构实验一顺序表实验报告
数据结构是计算机科学中的一门基础课程,在学习数据结构的过程中,顺序表是我们必须深入了解和掌握的重要数据结构之一。

在实验一中,我们对顺序表进行了一系列的操作,实现了增删改查等基本操作。

我们先来介绍一下顺序表的基本概念。

顺序表是将线性表中的数据存储在一段连续的存储空间中的数据结构,其查找效率高,但插入和删除操作效率较低。

顺序表需要预先分配一定的存储空间,当存储空间不足时需要进行动态扩容,即重新申请更大的存储空间并将原有数据复制到新的存储空间中。

在实验中,我们首先学习了顺序表的实现方式,包括顺序表的结构体定义、创建顺序表、插入元素、删除元素、修改元素以及查询元素等基本操作。

我们通过 C 语言来实现了这些操作,并将其封装成一个顺序表的 API,使其更加易于使用和维护。

在实验过程中,我们还发现顺序表中数据的存储顺序非常重要,因为顺序表中元素的存储顺序与元素的下标是一一对应的,如果存储的顺序错误,可能会导致元素的下标与我们想象中的不一致,从而造成一些意想不到的结果。

总的来说,实验一帮助我们更深入地了解了顺序表的实现方式和基本操作,同时也挖掘出了一些潜在问题,这对于我们今后的学习和实践都起到了很大的帮助。

实验1 顺序表及单链表

实验1 顺序表及单链表

软件技术基础实验一顺序表及单链表的使用班级:学号:姓名:日期:一、实验目的1.熟悉线性表的定义,理解顺序表基本操作。

2.会使用顺序表的基本操作求解一些简单问题。

3.掌握单链表的基本概念,理解单链表基本操作的实现。

4.会使用单链表的基本操作求解一些简单问题。

二、实验要求1.根据布置的作业编写源程序,上机验证实验结果;2.独立做实验,输入、调试所编程序;3.实验结束后,根据实验报告模板编写实验报告。

三、实验内容和步骤(1)创建一个(名为你的学号+a)工程,将所给的三个文件2.h 2.cpp 1加入到工程中,编写程序完成下列功能:1、理解1.h文件中sq_LList类的定义以及类成员函数的实现,删除main函数中的所有内容,在main函数中编写程序实现:(1)从键盘上输入5个整数,创建顺序表s1,并输出顺序表中的内容。

(2)从键盘上输入两个整数(元素的值和插入位置),插入到顺序表中,输出插入后的顺序表内容。

(3)从键盘上输入一个整数(删除元素的位置),判断在顺序表中是否存在,若存在,删除之,并输出删除后的顺序表内容。

源程序:void main(){}运行结果:2、编写程序实现顺序表逆置算法。

提示:(1)在1.h添加成员函数void Reverse()及此成员函数的定义。

(2)在main函数调用并实现将顺序表s1逆置头文件中成员函数定义:void sq_LList<T>::Reverse(){}void main(){//添加内容}运行结果:(2)创建一个(名为你的学号+b)工程,将所给的三个文件1.h 1.cpp 1加入到工程中,编写程序完成下列功能:1、理解1.h文件中linked_List类的定义及类成员函数的实现,删除main函数中的所有内容,在main函数中编写程序实现:(1)从键盘上输入5个整数,创建单链表s1,并输出单链表中的内容。

(2)从键盘上输入一个整数(删除位置),删除指定位置的元素,输出删除后的单链表内容。

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

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

实验报告课程名称数据结构实验项目实验一线性表的生成与操作题目一顺序表和链表的创建与基本操作系别___ _计算机学院 _ ______专业__ __计算机大类_ __班级/学号__(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.编写函数,通过数组,建立一个顺序表。

2.编写函数,实现对该顺序表的遍历。

3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。

4.编写函数,实现在顺序表的第i个位置上插入一个元素e的算法。

5.编写函数,实现删除顺序表中第i个元素的算法。

6.编写函数,实现输入一个元素data,把它插入到有序表中,使顺序表依然有序。

7.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

实验目的及要求:1.掌握顺序表的存储结构形式及其描述2.掌握顺序表的建立、查找、插入和删除操作。

实验程序:#include <stdio.h>#include <stdlib.h>#define M 100 //最大限void creat_list(int a[], int n); //建立顺序表void datafind_list(int a[],int d); //按值查找元素void find_list(int a[],int i); //按位查找元素void in(int a[], int i,int e); //插入接点void delet(int a[], int i); //删除接点void print_list(int a[] ); //打印顺序表int main(){int a[M];int data;int num;int place; int ch;printf("输入数据个数:");scanf("%d",&num);creat_list(a, num);print_list(a);while(1){printf("请选择操作:\n");printf("***************************************************************\n") ;printf("1.按值查找 2.按位查找 3.插入接点 4.删除接点 \n");printf("***************************************************************\n") ;scanf("%d",&ch);switch(ch){case 1:printf("Pleae enter the data you want to find:\n"); //按值查找scanf("%d",&data);datafind_list(a,data);break;case 2:printf("Pleae enter where you want to find:\n"); //按位查找scanf("%d",&place);printf("The place is :%d\n",place);find_list(a, place);break;case 3:printf("Pleae enter where you want to insert:\n"); //插入接点scanf("%d",&place);printf("input a data what you want to insert");scanf("%d",&data);in(a,place,data);print_list(a); break;case 4:printf("Pleae enter where you want to delet:\n"); //删除接点scanf("%d",&place);printf("The place is :%d\n",place);printf("Pleae enter where you want to delet:\n");scanf("%d",&place);printf("The place is :%d\n",place);delet(a, place);print_list(a);break;default: printf("输入错误,请重新选择");break;}}return 0;}void creat_list(int a[], int n) //建立顺序表{ int i;int j;int x;printf("输入数据:");scanf("%d",&a[1]);for (i = 2; i <= n; i++){ scanf("%d",&x);for (j = 1; j <= i - 1; j++){ if (x == a[j]){break;} }if (j > i - 1){a[i] = x;}elsei--;}a[0] = n;}void datafind_list(int a[],int d) //按值查找元素{ int i;int j=0;for(i=1;i<=a[0];i++){if(d==a[i])printf("the data is %d and its place is %d\n",d,i);else j++;}if (j==a[0]){printf("error\n");}}void find_list(int a[],int i) //按位查找{if (i < 1 || i > a[0] + 1){printf("error");}else printf("%5d",a[i]);}void in(int a[], int i,int e) //插入表中某个元素{ int j;if (i < 1 || i > a[0] + 1){printf("error");}else{ a[0] = a[0] + 1;for (j = a[0]; j >i; j--) //后移插入位置后的数{a[j] = a[j-1];}a[i]=e;}}void delet(int a[], int i) //删除表中某个元素{ int j;if (i < 1 || i > a[0] + 1){printf("error");exit(0);}for (j = i + 1; j <= a[0]; j++) //前移被删数的位置 {a[j - 1] = a[j];}a[0] = a[0] - 1;}void print_list(int a[] ) //打印顺序表{ int i;printf("\n");printf("顺序表是:");for (i = 1; i <= a[0]; i++){printf("%5d",a[i]);}printf("\n");}实验结果:实验分析:实验成功实现顺序表的基本操作!成功完成本实验,需要掌握顺序表的结构和理解顺序表结构的实验原理。

链表实验报告总结doc

链表实验报告总结doc

链表实验报告总结篇一:顺序表,链表总结实验报告实验报告实验目的:学生管理系统(顺序表)实验要求: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); 建立表格}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;klength;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s%d\n",L->data[k].xh,L->data[k].xm,L->d ata[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;else if((iL->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;ilength;i++){篇二:单链表的实验报告辽宁工程技术大学上机实验报告篇三:单链表实验报告实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现班级:T523-1 姓名:王娟学号:33完成日期:XX.04.04地点:5502学时:2学时一、需求分析【实验目的】通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的链接存储及相应的基本操作;并熟练掌握VC++ 6.0操作平台,学会调试程序,以及编写电子实验报告【实验要求】编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除,查找,求表长等基本功能,在此基础上能够加入DOS下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。

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

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

数据结构实验一顺序表实验报告一、实验目的本次实验的主要目的是通过实现顺序表的基本操作,深入理解线性表的逻辑结构和存储结构,掌握顺序表的插入、删除、查找等操作的实现方法,提高编程能力和问题解决能力。

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

三、实验原理顺序表是一种线性表的存储结构,它使用一组连续的存储单元依次存储线性表中的元素。

在顺序表中,元素的逻辑顺序与物理顺序是一致的。

顺序表的基本操作包括初始化、插入、删除、查找、遍历等。

在实现这些操作时,需要考虑顺序表的存储空间是否已满、插入和删除元素时元素的移动等问题。

四、实验内容(一)顺序表的定义```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表的元素int length; //顺序表的当前长度} SeqList;```(二)顺序表的初始化```cvoid InitList(SeqList L) {L>length = 0;}```(三)顺序表的插入操作```cint InsertList(SeqList L, int i, int e) {if (L>length == MAXSIZE) {//顺序表已满return 0;}if (i < 1 || i > L>length + 1) {//插入位置不合法return 0;}for (int j = L>length; j >= i; j) {//移动元素L>dataj = L>dataj 1;}L>datai 1 = e; //插入元素L>length++;return 1;}```(四)顺序表的删除操作```cint DeleteList(SeqList L, int i, int e) {if (L>length == 0) {//顺序表为空return 0;}if (i < 1 || i > L>length) {//删除位置不合法}e = L>datai 1; //取出被删除的元素for (int j = i; j < L>length; j++){//移动元素L>dataj 1 = L>dataj;}L>length;return 1;}```(五)顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {return i + 1;}}}```(六)顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");}```五、实验步骤1、打开 Visual Studio 2019,创建一个新的 C 语言项目。

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

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

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

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

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

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

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

三、实验内容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。

数据结构第二章实验报告

数据结构第二章实验报告

数据结构第二章实验报告一、实验目的数据结构第二章主要涉及线性表的相关知识,本次实验的目的在于通过实际操作和编程实现,深入理解线性表的概念、存储结构以及基本操作,巩固所学的理论知识,并提高编程能力和问题解决能力。

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

三、实验内容(一)顺序表的实现顺序表是一种用顺序存储方式实现的线性表。

在实验中,我们定义了一个结构体来表示顺序表,包括存储数据的数组和表示表长度的变量。

实现了顺序表的初始化、插入、删除、查找等基本操作。

(二)链表的实现链表是一种通过指针链接实现的线性表。

我们分别实现了单向链表和双向链表。

在单向链表中,每个节点包含数据和指向下一个节点的指针;双向链表则在此基础上增加了指向前一个节点的指针,使得链表的操作更加灵活。

(三)线性表的应用运用实现的线性表解决了一些实际问题,如数据排序、查找特定元素等。

四、实验步骤(一)顺序表的实现步骤1、定义顺序表结构体,包括数据数组和长度变量。

2、实现顺序表的初始化函数,将长度初始化为 0。

3、插入操作:首先判断表是否已满,如果未满,在指定位置插入元素,并将后续元素后移。

4、删除操作:首先判断指定位置是否合法,然后将该位置元素删除,并将后续元素前移。

5、查找操作:遍历表中的元素,找到目标元素返回其位置,否则返回-1。

(二)链表的实现步骤1、单向链表定义单向链表节点结构体,包含数据和指向下一个节点的指针。

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

插入操作:分为头插法和尾插法,根据插入位置的不同选择相应的方法。

删除操作:找到要删除的节点,将其前后节点连接起来,释放删除节点的内存。

查找操作:遍历链表,找到目标元素返回节点指针,否则返回NULL。

2、双向链表定义双向链表节点结构体,包含数据、指向前一个节点和指向下一个节点的指针。

初始化函数与单向链表类似,但需要同时处理前后指针。

插入和删除操作:在单向链表的基础上,同时更新前后节点的指针。

实验1顺序表和链表基本操作(给学生)

实验1顺序表和链表基本操作(给学生)

实验一、二:线性表的应用班级学号姓名一、实验预备知识1 复习C++中编写函数的相关内容。

2 复习如何用主函数将多个函数连在一起构成一个C++完整程序。

二、实验目的1 掌握线性表的顺序和链式存储结构2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算三、实验要求1 编写初始化并创建线性表和输出线性表的算法。

2 编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。

3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。

4将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。

四、实验步骤顺序表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.初始化并建立顺序表。

3.编写顺序表输出算法。

(内存中开辟的单元数为8)4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。

单链表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。

3.编写单链表输出算法。

4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。

五、实验结果1.给出程序清单及输入/输出结果。

2.实验过程中遇到的问题、解决方法及心得体会。

顺序表链表KMP实验报告

顺序表链表KMP实验报告

附件(四)深圳大学实验报告课程名称:数据结构实验与课程设计实验项目名称:顺序表、链表、堆栈队列、串KMP算法学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制第1行输出创建后的顺序表内容,包括顺序表实际长度和数据(完成)每成功执行一次操作(插入或删除),输出执行后的顺序表内容(完成)每成功执行一次查找,输出查找到的数据(完成)如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容(完成)2.Problem B: DS顺序表--连续操作目的:(1)建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)(2)实现连续多个插入,即从位置i开始插入多个数据(3)实现连续多个删除,即从位置i开始删除多个数据要求:Input第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据(完成)第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k 个数据(完成)第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据(完成)Output顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开(完成)第1行输出创建后的顺序表内容(完成)第2行输出执行连续插入后的顺序表内容(完成)第3行输出执行连续删除后的顺序表内容(完成)(2)属性包括:data数据域、next指针域(3)操作包括:插入、删除、查找(4)注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据要求:Input第1行先输入n表示有n个数据,接着输入n个数据(完成)第2行输入要插入的位置和新数据(完成)第3行输入要插入的位置和新数据(完成)第4行输入要删除的位置(完成)第5行输入要删除的位置(完成)第6行输入要查找的位置(完成)第7行输入要查找的位置(完成)Output数据之间用空格隔开,(完成)第1行输出创建后的单链表的数据(完成)每成功执行一次操作(插入或删除),输出执行后的单链表数据(完成)每成功执行一次查找,输出查找到的数据(完成)如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表(完成)2.Problem B: DS单链表--结点交换目的:(1)用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。

数据结构实验报告-实验一顺序表、单链表基本操作的实现

数据结构实验报告-实验一顺序表、单链表基本操作的实现

数据结构实验报告-实验⼀顺序表、单链表基本操作的实现实验⼀顺序表、单链表基本操作的实现l 实验⽬的1、顺序表(1)掌握线性表的基本运算。

(2)掌握顺序存储的概念,学会对顺序存储数据结构进⾏操作。

(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能⼒。

l 实验内容1、顺序表1、编写线性表基本操作函数:(1)InitList(LIST *L,int ms)初始化线性表;(2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插⼊元素;(3)DeleteList1(LIST *L,int item)删除指定元素值的线性表记录;(4)DeleteList2(LIST *L,int rc)删除指定位置的线性表记录;(5)FindList(LIST *L,int item)查找线性表的元素;(6)OutputList(LIST *L)输出线性表元素;2、调⽤上述函数实现下列操作:(1)初始化线性表;(2)调⽤插⼊函数建⽴⼀个线性表;(3)在线性表中寻找指定的元素;(4)在线性表中删除指定值的元素;(5)在线性表中删除指定位置的元素;(6)遍历并输出线性表;l 实验结果1、顺序表(1)流程图(2)程序运⾏主要结果截图(3)程序源代码#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct LinearList/*定义线性表结构*/{int *list; /*存线性表元素*/int size; /*存线性表长度*/int Maxsize; /*存list数组元素的个数*/};typedef struct LinearList LIST;void InitList(LIST *L,int ms)/*初始化线性表*/{if((L->list=(int*)malloc(ms*sizeof(int)))==NULL){printf("内存申请错误");exit(1);}L->size=0;L->Maxsize=ms;}int InsertList(LIST *L,int item,int rc)/*item记录值;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++;return0;}void OutputList(LIST *L)/*输出线性表元素*/{int i;printf("%d",L->list[i]);printf("\n");}int FindList(LIST *L,int item)/*查找线性元素,返回值>=0为元素的位置,返回-1为没找到*/ {int i;for(i=0;i<L->size;i++)if(item==L->list[i])return i;return -1;}int DeleteList1(LIST *L,int item)/*删除指定元素值得线性表记录,返回值为>=0为删除成功*/ {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--;return0;}int main(){LIST LL;int i,r;printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.size,LL.Maxsize);printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.list,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(i<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);}}}链表基本操作l 实验⽬的2、链表(1)掌握链表的概念,学会对链表进⾏操作。

数据结构实验1顺序表_链表

数据结构实验1顺序表_链表

淮海工学院计算机科学系实验报告书课程名:《数据结构》题目:线性表数据结构试验班级:软件112学号:姓名:线性表实验报告要求1目的与要求:1)掌握线性表数据结构的基本概念和抽象数据类型描述;2)熟练掌握线性表数据结构的顺序和链式存储存表示;3)熟练掌握线性表顺序存储结构的基本操作算法实现;4)熟练掌握线性表的链式存储结构的基本操作算法实现;5)掌握线性表在实际问题中的应用和基本编程技巧;6)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);7)按照报告格式和内容要求,认真书写实验报告,并在试验后的第三天提交电子(全班同学提交到学委,再统一打包提交给老师)和纸质(每班每次5份,学委安排,保证每个同学至少提交一次);8)积极开展实验组组内交流和辅导,严禁复制和剽窃他人实验成果,一旦发现严肃处理;9)上实验课前,要求每个同学基本写好程序,并存储在自己的U盘上,用于实验课堂操作时调试和运行。

凡不做准备,没有提前编写程序者,拒绝上机试验。

2实验内容或题目一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法:1)创建任意整数线性表(即线性表的元素值随机在键盘上输入)的顺序存储结构(即顺序表),长度限定在25之内;2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值);3)在顺序表中查找第i个元素,并返回其值;4)在顺序表第i个元素之前插入一已知元素;5)在顺序表中删除第i个元素;6)求顺序表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。

按照动态单链表结构实现如下算法:1)按照头插法或尾插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),长度限定在10之内;2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5)在链表中第i个结点之前插入一个新结点;6)在线性表中删除第i个结点;7)计算链表的长度。

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

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

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

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

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

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

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

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

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

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

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

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

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

- 当前元素个数加一。

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

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

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

- 当前元素个数减一。

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

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

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

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

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

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

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

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

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

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

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

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

线性表与链表实验报告

线性表与链表实验报告

数据结构实验报告实验0:顺序表与链表专业:班级:姓名:学号:指导教师:日期:一、实验目的(1)掌握顺序表的存储结构形式及其描述和基本运算的实。

(2)熟练掌握动态链表结构及有关算法的设计。

(3)掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。

(4)理解单循环链表及双循环链表的特点。

二、实验内容(1)顺序表的应用(2)链表的应用三、需求分析1.输入的形式和输入值的范围2.建立链表时输入的都是整数,输入0代表输入的结束,插入元素时需要输入插入的位置和元素的值,删除元素时输入删除元素的值。

3.输出形式4.所有操作在出现错误时都会有提示,并且在任意一个操作结束后都会输出操作后的链表。

5.程序所能达到的功能6.完成链表的生成,任意位置插入元素、删除,实现链表数据的排序,删除链表中相同的元素,并且比较两个链表是否相等以及将两链表合成一个有序的链表。

7. 4.测试数据:见第八部分。

四、概要设计实验一:(1) 本程序包含的函数如下:其中main函数负责操作其他的函数。

(2)各函数的功能设计为:Creat(student & L):建立一个链表L(尾部插入建立的链表),并且返回这个链表的头指针。

find(student L,int e):在链表L中寻找一样元素e。

print(student L):依次输出链表 L 的内容。

insert(student & L):插入元素。

spilt(student & L):从后向前寻找奇数在偶数前的情况,如果一个奇数或偶数之后还是一个奇数和偶数,就让代表奇数和偶数的变量自增,在每次所有符合连续情况的奇偶数交换完成后,偶数要从新计数。

symmetry(student L):判断是否是对称的链表。

unite(student L1, student L2, Student & L3):将链表A和B合成一个非递减的链表,返回新链表的头指针.五、详细设计(1)结点类型和指针类型:typedef struct{int *elem;//数组指针elem指示线性表的基地址。

数据结构实验报告-顺序表链表的实现参考模板

数据结构实验报告-顺序表链表的实现参考模板

课程名称:数据结构任课教师:实验题目:线性表的基本操作实验环境: Visual C++ 6.0实验目的:1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。

实验内容:定义一个包含学生信息(学号,姓名,成绩)的的顺表序和链表,使其具有如下功能:(1)根据指定学生个数,逐个输入学生信息;(2)逐个显示学生表中所有学生的相关信息;(3)根据姓名进行查找,返回此学生的学号和成绩;(4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5)给定一个学生信息,插入到表中指定的位置;int createStLink(struct Node *head,struct Node *stu){struct Node *p6,*p7,*p8;p7=head;p6=stu;if(head==NULL){head=p6;p6->next=NULL;}else{ //如果链表为空则在头结点创建信息while(p6->num > p7->num && p7->next!=NULL){p8=p7;p7=p7->next;}if(p6->num<=p7->num){if(head==p7)head=p6;elsep8->next=p6;p6->next=p7;}else{p7->next=p6;p6->next=NULL;}}N++;return 1;}int main(){struct Node *H,*stud;char M;int num1;H=initlist();(6)删除指定位置的学生记录;(7) 统计表中学生个数。

实验提示:学生信息的定义:typedef struct {char no[8]; //8位学号char name[20]; //姓名int price; //成绩}Student;顺序表的定义typedef struct {Student *elem; //指向数据元素的基地址int length; //线性表的当前长度}SqList;链表的定义:typedef struct LNode{Student data; //数据域struct LNode *next; //指针域}LNode,*LinkList;实验要求:(1) 程序要添加适当的注释,程序的书写要采用缩进格式。

实验一顺序表与链表成品

实验一顺序表与链表成品

实验一顺序表与链表一、实验目的1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验预习说明以下概念1、线性表:线性表是最常用且最简单的一种数据结构。

一个线性表是n个数据元素的有限序列。

2、顺序表:线性表的顺序存储结构或顺序映像,通常,称这种存储结构的线性表为顺序表。

3、链表:指针域中存储的信息称作指针或链。

N个接点连接成一个链表,故又称线性链表。

三、实验容和要求1、阅读下面程序,在横线处填写函数的基本功能。

并运行程序,写出结果。

●#include<stdio.h>●#include<malloc.h>●#define ERROR 0●#define OK 1●●#define INIT_SIZE 5 /*初始分配的顺序表长度*/●#define INCREM 5 /*溢出时,顺序表长度的增量*/●typedef int ElemType; /*定义表元素的类型*/●typedef struct Sqlist{●ElemType *slist; /*存储空间的基地址*/●int length; /*顺序表的当前长度*/●int listsize; /*当前分配的存储空间*/●}Sqlist;●●int InitList_sq(Sqlist *L); /* 构造一个空的线性表L */●int CreateList_sq(Sqlist *L,int n); /* 不断地插入元素*/●int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入一个数据元素e,L的长度加1 */●int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/●int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/●int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/●●int InitList_sq(Sqlist *L){●L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));●if(!L->slist) return ERROR;●L->length=0;●L->listsize=INIT_SIZE;●return OK;●}/*InitList*/●●int CreateList_sq(Sqlist *L,int n){●ElemType e;●int i;●for(i=0;i<n;i++){●printf("input data %d",i+1);●scanf("%d",&e);●if(!ListInsert_sq(L,i+1,e))●return ERROR;●}●return OK;●}/*CreateList*/●●/*输出顺序表中的元素*/●int PrintList_sq(Sqlist *L){●int i;●for(i=1;i<=L->length;i++)●printf("%5d",L->slist[i-1]);●return OK;●}/*PrintList*/●●int ListInsert_sq(Sqlist *L,int i,ElemType e){●int k;●if(i<1||i>L->length+1)●return ERROR;●if(L->length>=L->listsize){●L->slist=(ElemType*)realloc(L->slist,●(INIT_SIZE+INCREM)*sizeof(ElemType));●if(!L->slist)●return ERROR;●L->listsize+=INCREM;●}●for(k=L->length-1;k>=i-1;k--){●L->slist[k+1]= L->slist[k];●}●L->slist[i-1]=e;●L->length++;●return OK;●}/*ListInsert*/●●/*在顺序表中删除第i个元素*/●int ListDelete_sq(Sqlist *L,int i)●{int k;●if(i<1||i>L->length)●return ERROR;●for(k=i-1;k<=L->length-1;k++)●{●L->slist[k]=L->slist[k+1];●}●L->length--;●return 0;●}//listDelete_●/*在顺序表中查找指定值元素,返回其序号*/ ●/* int ListLocate(Sqlist *L,ElemType e)●{●int n;●int i;●if(i<1||i>L->length)●return ERROR;●for(n=0;n<i;n++)●{●}●e=L->slist[n-1];●●}*/●●●int ListLocate(Sqlist *L,ElemType e)●{●int k;●for(k=0;k<=L->length-1;k++)●if(e==L->slist[k])●{●printf("此元素地址为:%d\n",k+1);●return OK;●}●if(k==L->length)●{●printf("不存在!");●return ERROR;}●}●●●int main(){●Sqlist sl;●int n,m,k;●printf("please input n:"); /*输入顺序表的元素个数*/●scanf("%d",&n);●if(n>0){●printf("\n1-Create Sqlist:\n");●InitList_sq(&sl);●CreateList_sq(&sl,n);●printf("\n2-Print Sqlist:\n");●PrintList_sq(&sl);●●●printf("\nplease input locate location :(location)\n");●scanf("%d",&m);●ListLocate(&sl,m);●●printf("\n3-Print Sqlist:\n");●PrintList_sq(&sl);●●●●printf("\nplease input insert location and data:(location,data)\n");●scanf("%d,%d",&m,&k);●ListInsert_sq(&sl,m,k);●printf("\n3-Print Sqlist:\n");●PrintList_sq(&sl);●●printf("\nplease input Delete location and data:(location)\n");●scanf("%d",&m);●ListDelete_sq(&sl,m);●●printf("\n3-Print Sqlist:\n");●PrintList_sq(&sl);●●●●/* printf("\nplease input locate location :(location)\n");●scanf("%d",&m);●ListLocate(&sl,m);●●printf("\n3-Print Sqlist:\n");●PrintList_sq(&sl);●*/●●●●printf("\n");●●}●else●printf("ERROR");●return 0;●}运行结果●算法分析1;输入线性表的元素个数,然后构建一个新的线性表,2;连续用creatlist函数往性表里插入元素,将其元素输出,3;在下一步中输入插入元素的位置和个数,最后一步,输出运行后的线性表。

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

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

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

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

数据结构是一门专业选技术基础科。

一方面,它要求我们学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术;另一方面,数据结构的学习过程也是复杂程序设计的训练过程,要求我们编写的程序结构清楚和正确易读,复合软件工程的规范,并培养我们的数据抽象能力。

本次课程设计就是对数据结构中的顺序表和链表的操作的应用。

顺序表:1.顺序表的定义(1) 顺序存储方法即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。

(2) 顺序表(Sequential List)用顺序存储方法存储的线性表简称为顺序表(Sequential List)。

实验一顺序表与链表(数据结构)

实验一顺序表与链表(数据结构)

实验一顺序表与链表
姓名:学号:实验日期:
教师评语:
一、实验目的
1、掌握线性表中元素的前驱、后继的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验内容和要求
1、试写一个算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。

2、假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各个不相同),现要求另开辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。

试用单链表编写求C的算法。

3、假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。

已知s 为指向链表中某个结点的指针,试编写算法在链表中删除指针s所指结点的前驱结点。

三、实验小结
1。

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

实验一顺序表与链表一、实验目的1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验预习说明以下概念1、线性表:线性表是最常用且最简单的一种数据结构。

一个线性表是n个数据元素的有限序列。

2、顺序表:线性表的顺序存储结构或顺序映像,通常,称这种存储结构的线性表为顺序表。

3、链表:指针域中存储的信息称作指针或链。

N个接点连接成一个链表,故又称线性链表。

三、实验内容和要求1、阅读下面程序,在横线处填写函数的基本功能。

并运行程序,写出结果。

●#include<stdio.h>●#include<malloc.h>●#define ERROR 0●#define OK 1●●#define INIT_SIZE 5 /*初始分配的顺序表长度*/●#define INCREM 5 /*溢出时,顺序表长度的增量*/●typedef int ElemType; /*定义表元素的类型*/●typedef struct Sqlist{●ElemType *slist; /*存储空间的基地址*/●int length; /*顺序表的当前长度*/●int listsize; /*当前分配的存储空间*/●}Sqlist;●●int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/●int CreateList_sq(Sqlist *L,int n); /* 不断地插入元素*/●int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入一个数据元素e,L的长度加1 */●int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/●int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/●int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/ ●●int InitList_sq(Sqlist *L){● L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));● if(!L->slist) return ERROR;● L->length=0;● L->listsize=INIT_SIZE;● return OK;●}/*InitList*/●●int CreateList_sq(Sqlist *L,int n){● ElemType e;● int i;● for(i=0;i<n;i++){● printf("input data %d",i+1);● scanf("%d",&e);● if(!ListInsert_sq(L,i+1,e))● return ERROR;● }● return OK;●}/*CreateList*/●●/*输出顺序表中的元素*/●int PrintList_sq(Sqlist *L){● int i;● for(i=1;i<=L->length;i++)● printf("%5d",L->slist[i-1]);● return OK;●}/*PrintList*/●●int ListInsert_sq(Sqlist *L,int i,ElemType e){● int k;●if(i<1||i>L->length+1)●return ERROR;●if(L->length>=L->listsize){●L->slist=(ElemType*)realloc(L->slist,●(INIT_SIZE+INCREM)*sizeof(ElemType));● if(!L->slist)●return ERROR;●L->listsize+=INCREM;●}● for(k=L->length-1;k>=i-1;k--){● L->slist[k+1]= L->slist[k];● }● L->slist[i-1]=e;● L->length++;● return OK;●}/*ListInsert*/●●/*在顺序表中删除第i个元素*/●int ListDelete_sq(Sqlist *L,int i)●{int k;● if(i<1||i>L->length)● return ERROR;● for(k=i-1;k<=L->length-1;k++)● {● L->slist[k]=L->slist[k+1];● }● L->length--;● return 0;●}//listDelete_● /*在顺序表中查找指定值元素,返回其序号*/ ● /* int ListLocate(Sqlist *L,ElemType e)●{● int n;● int i;● if(i<1||i>L->length)● return ERROR;● for(n=0;n<i;n++)● {● }● e=L->slist[n-1];●●}*/●●●int ListLocate(Sqlist *L,ElemType e)●{●int k;●for(k=0;k<=L->length-1;k++)●if(e==L->slist[k])● {●printf("此元素地址为:%d\n",k+1);● return OK;●}● if(k==L->length)●{●printf("不存在!");●return ERROR;}●}●●●int main(){● Sqlist sl;● int n,m,k;● printf("please input n:"); /*输入顺序表的元素个数*/● scanf("%d",&n);● if(n>0){● printf("\n1-Create Sqlist:\n");● InitList_sq(&sl);● CreateList_sq(&sl,n);● printf("\n2-Print Sqlist:\n");● PrintList_sq(&sl);●●● printf("\nplease input locate location :(location)\n");● scanf("%d",&m);● ListLocate(&sl,m);●●printf("\n3-Print Sqlist:\n");● PrintList_sq(&sl);●●●● printf("\nplease input insert location anddata:(location,data)\n");● scanf("%d,%d",&m,&k);● ListInsert_sq(&sl,m,k);●printf("\n3-Print Sqlist:\n");● PrintList_sq(&sl);●● printf("\nplease input Delete location and data:(location)\n");● scanf("%d",&m);● ListDelete_sq(&sl,m);●●printf("\n3-Print Sqlist:\n");● PrintList_sq(&sl);●●●●/* printf("\nplease input locate location :(location)\n");● scanf("%d",&m);● ListLocate(&sl,m);●●printf("\n3-Print Sqlist:\n");● PrintList_sq(&sl);●*/●●●●printf("\n");●● }● else● printf("ERROR");● return 0;●}运行结果●算法分析1;输入线性表的元素个数,然后构建一个新的线性表,2;连续用creatlist函数往性表里插入元素,将其元素输出,3;在下一步中输入插入元素的位置和个数,最后一步,输出运行后的线性表。

2、为第1题补充删除和查找功能函数,并在主函数中补充代码验证算法的正确性。

删除算法代码:●int ListDelete_sq(Sqlist *L,int i) ●{int k;● if(i<1||i>L->length)● return ERROR;● for(k=i-1;k<=L->length-1;k++)● {● L->slist[k]=L->slist[k+1];● }● L->length--;● return 0;●}//listDelete_●运行结果查找算法代码:int ListLocate(Sqlist *L,ElemType e) {int k;for(k=0;k<=L->length-1;k++)if(e==L->slist[k]){printf("此元素地址为:%d\n",k+1); return OK;}if(k==L->length){printf("不存在!");return ERROR;}}●●●运行结果●算法分析●/*在顺序表中查找指定值元素,返回其序号*/●int ListLocate(Sqlist *L,ElemType e)●{●int k;●for(k=0;k<=L->length-1;k++)/*从第一个元素开始查找*/●if(e==L->slist[k])● {●printf("此元素地址为:%d\n",k+1);● return OK;/*若存在与e相等的元素,则输出其地址,返回OK*/ ●}● if(k==L->length)●{●printf("不存在!");●return ERROR;}/*不存在*/●}3、阅读下面程序,在横线处填写函数的基本功能。

相关文档
最新文档