实验一:顺序表的插入和删除

合集下载

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

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

顺序表的基本操作实验报告一、实验目的本次实验旨在深入理解和掌握顺序表的基本操作,包括顺序表的创建、插入、删除、查找和遍历等功能,并通过实际编程实现,加深对数据结构中顺序存储结构的理解和应用能力。

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

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

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

顺序表的基本操作包括:1、创建顺序表:为顺序表分配存储空间,并初始化相关参数。

2、插入操作:在指定位置插入元素,需要移动后续元素以腾出空间。

3、删除操作:删除指定位置的元素,并将后续元素向前移动。

4、查找操作:在顺序表中查找指定元素,返回其位置或表示未找到。

5、遍历操作:依次访问顺序表中的每个元素。

四、实验步骤1、定义顺序表的数据结构```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表元素的数组int length; //顺序表的当前长度} SeqList;```2、顺序表的创建```cvoid InitList(SeqList L) {L>length = 0; //初始化顺序表长度为 0}```3、顺序表的插入操作```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++;//顺序表长度增加 1return 1;}```4、顺序表的删除操作```cint DeleteList(SeqList L, int i) {if (i < 1 || i > L>length) {//删除位置不合法return 0;}for (int j = i; j < L>length; j++){//移动元素填补删除位置L>dataj 1 = L>dataj;}L>length; //顺序表长度减少 1return 1;}```5、顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {//找到元素return i + 1;}}return 0; //未找到元素}```6、顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);//输出顺序表中的元素}printf("\n");}```五、实验结果与分析1、测试创建顺序表```cSeqList L;InitList(&L);```创建成功,顺序表初始长度为 0。

线性顺序表的插入与删除(实验报告)

线性顺序表的插入与删除(实验报告)

一、实验目的和要求通过对顺序表的编程练习,加强对顺序表的特点、顺序存储结构及其基本运算的理解和掌握。

提前了解实验相关的c语言的知识。

使用C语言根据相应算法编写一个程序,实现建立线性顺序表、插入和删除等基本操作。

要求仔细阅读下面的内容,编写一个C程序,上机调试通过,并观察其结果,写出实验报告书。

二、实验内容和原理内容:建立一个容量10的顺序表,在其中插入3个元素,然后作删除运算。

原理:在第i个元素前插入元素,从第i个元素开始到最后一个元素均向后移动一个位置,然后将新元素插入到第i个位置,将线性表的长度加1。

删除第i个元素,从第i+1个元素开始到最后一个元素均向前移动一个位置,然后将线性表的长度减1。

三、主要仪器设备计算机一台四、实验主程序#include<stdio.h>#include<stdlib.h>struct List{int size;int n;int *head;};void init(struct List *pl,int size){pl->size=size;pl->n=0;pl->head=malloc(size*sizeof(int)); }void in(int i,int val,struct List *pl){int k;if(pl->n==pl->size){printf("list is full.\n");return;}if(i>pl->n)i=pl->n+1;if(i<1)i=1;for(k=pl->n-1;k>=i-1;--k)pl->head[k+1]=pl->head[k];pl->head[i-1]=val;++pl->n;}void out(int i,struct List *pl){int k;if(pl->n==0){printf("list is empty.\n");return;}if(i<1||i>pl->n){printf("this element is not in the list.\n");return;}for(k=i;k<=pl->n;++k)pl->head[k-1]=pl->head[k];--pl->n;return;}void print(const struct List *pl) {int i;for(i=0;i!=pl->n;++i)printf("%d ",pl->head[i]);printf("\n");}int main(void){int i;struct List list;init(&list,10);for(i=0;i!=5;++i)in(i+1,i,&list);print(&list);in(1,5,&list);print(&list);in(10,4,&list);print(&list);in(5,50,&list);print(&list);out(1,&list);print(&list);out(list.n,&list);print(&list);out(3,&list);print(&list);getchar();return 0;}实验结果五、实验心得通过实验学习,我理解了线性顺序表的插入与删除的算法,了解到线性顺序表的插入与删除得效率低下,感到受益匪浅。

实验一顺序表的插入和删除实验目的...

实验一顺序表的插入和删除实验目的...
void genAxis(int length) {
int ctrl_loop;
putchar(' '); for (ctrl_loop = 0; ctrl_loop < length; ++ctrl_loop) {
std::cout << ctrl_loop + 1; } putchar('\n'); }
实验一顺序表的插入和删除
实验目的
1、掌握使用 Turbo C 上机调试线性表的基本方法; 2、掌握线性表的基本操作:插入、删除在顺序存储结构上的运算。
实验要求
1、认真阅读和掌握本实验的给定的程序; 2、按照你的操作需要,编制程序、上机调试运行程序; 3、保存程序的运行结果,并结合程序进行分析。
实验内容
std::cout << " Copyright (C) 2014 Spinel Studio" << std::endl; std::cout << " By Andrew Junzki" << std::endl; putchar('\n'); }
实验二链表的插入和删除
实验目的
1、掌握使用 Turbo C 上机调试线性表的基本方法; 2、掌握链表的基本操作:插入、删除和游历的操作。
实验要求
1、认真阅读和掌握本实验的给定的程序; 2、按照你的操作需要,编制程序、上机调试运行程序; 3、保存程序的运行结果,并结合程序进行分析。
实验内容
利用顺序表完成线性表信息的管理。要求首先建立并初始化线性表,并实现 增加、删除和游历等功能。
(1) 对给定字母 A C D E 建立顺序表 (2) 在给定位置插入字母 B,形成顺序表 A B C D E (3) 删除字母 D,形成表 A B C E

顺序表的操作实验报告

顺序表的操作实验报告

顺序表的操作实验报告顺序表的操作实验报告一、引言顺序表是一种常见的数据结构,它在计算机科学中被广泛应用。

本实验旨在通过实际操作顺序表,探索其基本操作和性能。

二、实验目的1. 理解顺序表的基本原理和数据结构;2. 掌握顺序表的插入、删除、查找等操作;3. 分析顺序表操作的时间复杂度。

三、实验过程1. 初始化顺序表:首先,我们创建一个空的顺序表,并设定其初始长度为10。

2. 插入元素:在顺序表中插入若干个元素,观察插入操作的效果。

我们可以通过在表尾插入元素,或者在表中间插入元素来测试插入操作的性能。

3. 删除元素:从顺序表中删除指定位置的元素,并观察删除操作的效果。

我们可以选择删除表尾元素或者表中间元素来测试删除操作的性能。

4. 查找元素:在顺序表中查找指定元素,并返回其位置。

我们可以选择查找表头元素、表尾元素或者表中间元素来测试查找操作的性能。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们可以在插入元素时观察到扩容操作的效果。

四、实验结果与分析1. 初始化顺序表:成功创建了一个长度为10的空顺序表。

2. 插入元素:通过在表尾插入10个元素,我们观察到插入操作的时间复杂度为O(1)。

然而,当我们在表中间插入元素时,需要将插入位置之后的所有元素后移,时间复杂度为O(n)。

3. 删除元素:从表尾删除元素的时间复杂度为O(1),而从表中间删除元素需要将删除位置之后的所有元素前移,时间复杂度为O(n)。

4. 查找元素:在顺序表中查找元素的时间复杂度为O(n),因为需要逐个比较每个元素。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们观察到扩容操作的时间复杂度为O(n),因为需要将原有元素复制到新的更大的空间中。

五、实验总结通过本次实验,我们深入了解了顺序表的基本操作和性能。

顺序表的插入、删除和查找操作的时间复杂度与操作位置有关,需要注意选择合适的操作位置以提高效率。

实验一顺序表的插入和删除

实验一顺序表的插入和删除

山东英才学院实验报告课年月日学院(系)班姓名学号实验题目:成绩:一、实验目的和要求本实验是数据结构后续实验的基础,做好本实验有助于学生理解单顺序线性表的概念,使学生掌握顺序线性表结构体的定义,熟悉顺序线性表的基本操作。

为后续实验打好基础。

定义顺序线性表结构体,定义顺序线性表初始化、销毁、插入、删除操作函数二、实验方法与步骤#include "stdio.h"#include "malloc.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;#define LIST_INIT_SIZE 100 //线性表存储空间初始分配量#define LISTINCREMENT 10 //线性表存储空间分配增量typedef int ElemType;typedef struct{ElemType *elem; //线性表的基址int length; //线性表长度int listsize; //当前分配的存储容量} SqList;//线性表初始化:分配内存,长度置为0,初始容量LIST_INIT_SIZEStatus InitList(SqList &L){ L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(L.elem==NULL) return OVERFLOW;L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}//释放内存,销毁线性表Status DestroyList(SqList &L){ if(L.elem==NULL) return OVERFLOW;free(L.elem);return OK;}Status ListEmty(SqList &L){ if(L.length==0) return 1;else return 0;}int ListLength(SqList &L){ return L.length;}//定位函数int LocateElem(SqList &L,ElemType e,Status compare(ElemType x, ElemType y)){ int i=1,*p=L.elem;while(i<=L.length ){if( (compare)(*p,e)==TRUE )return i;else{i++;p++;}}if(i>=L.length) return ERROR;}//向线性表中插入新数据Status ListInsert(SqList &L,int i,ElemType e){ if(i<1 || i>L.length+1 ) return ERROR;if(L.length >= L.listsize ){ ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT)*sizeof(ElemType));if(newbase==NULL) return OVERFLOW;L.elem=newbase;L.listsize=L.listsize+LISTINCREMENT;}ElemType *q=&(L.elem[i-1]);for(ElemType *p=&(L.elem[L.length-1]); p>=q; p--)*(p+1)=*p;*q=e;L.length=L.length+1;return OK;}//向线性表中插入新数据Status ListDelete(SqList &L,int i,ElemType &e){ if(i<1 || i>L.length+1 ) return ERROR;ElemType *p=&(L.elem[i-1]);e=*p;ElemType *q=L.elem+L.length-1;for(++p; p<=q;p++)*(p-1)=*p;L.length=L.length-1;return OK;}//线性表遍历函数void ListTraverse( SqList &L){ printf("线性表长度:%d,线性表容量:%d\n",L.length ,L.listsize );printf("线性表遍历序列:");if(L.length ==0) printf("线性表中无数据");for(int i=0; i<L.length ;i++)printf(" %d",L.elem[i]);printf("\n");}void main(){ SqList La;int pos,choose;ElemType e;InitList(La);while(1){ printf("请选择操作:选择1 进行插入操作,选择2 进行删除操作,选择3 显示表中内容,选择0 结束程序");scanf("%d",&choose);if(choose==1){ while(1){ printf("请输入插入位置(输入位置为0结束插入操作):");scanf("%d",&pos);if(pos==0) break;printf("请输入插入数据:");scanf("%d",&e);ListInsert(La,pos,e);}}else if(choose==2){ while(1){ printf("请输入删除位置(输入位置为0结束删除操作):");scanf("%d",&pos);if(pos==0) break;ListInsert(La,pos,e);}}else if(choose==3) ListTraverse(La);else if(choose==0) break;}DestroyList(La);}实验结果截图心得体会:本实验是数据结构后续实验的基础,做好本实验有助于学生理解单顺序线性表的概念,使学生掌握顺序线性表结构体的定义,熟悉顺序线性表的基本操作。

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)顺序表的基本操作和实现实验报告1. 引言顺序表是计算机科学中一种常用的数据结构,用于存储一组元素并支持快速的随机访问。

本实验旨在探究顺序表的基本操作和实现方法。

2. 实验目的•理解顺序表的概念和特性。

•学习顺序表的基本操作,包括插入、删除、查找和修改等。

•掌握顺序表的实现方法,包括静态分配和动态分配两种方式。

•培养对数据结构的抽象思维和编程能力。

3. 实验内容1.了解顺序表的定义,及其与数组的关系。

2.掌握插入操作的实现方法,包括在表头、表中和表尾插入元素。

3.掌握删除操作的实现方法,包括按索引删除和按值删除。

4.掌握查找操作的实现方法,包括按索引查找和按值查找。

5.掌握修改操作的实现方法,包括按索引修改和按值修改。

6.实现顺序表的静态分配和动态分配两种方式。

4. 实验步骤1.定义顺序表的结构体,包括数据存储区和长度属性。

2.实现插入操作,根据需要选择插入位置和移动元素。

3.实现删除操作,根据需要选择删除方式和更新长度。

4.实现查找操作,根据需要选择查找方式和返回结果。

5.实现修改操作,根据需要选择修改方式和更新元素。

6.实现顺序表的静态分配和动态分配方法。

5. 实验结果经过多次实验和测试,顺序表的基本操作都能够正确实现。

在插入操作中,能够将元素正确插入指定位置,并保持顺序表的有序性。

在删除操作中,能够按需删除指定位置或值的元素,并正确更新顺序表的长度。

在查找操作中,能够根据索引或值查找到对应的元素,并返回正确的结果。

在修改操作中,能够按需修改指定位置或值的元素,并更新顺序表的内容。

6. 实验总结本实验通过对顺序表的基本操作和实现方法的学习和实践,进一步巩固了对数据结构的理解和编程能力的培养。

顺序表作为一种常用的数据结构,对于解决实际问题具有重要的作用。

通过本次实验,我对顺序表的插入、删除、查找和修改等操作有了更深入的了解,并学会了如何实现这些操作。

通过本次实验,我还学会了顺序表的静态分配和动态分配方法,了解了它们的区别和适用场景。

顺序表的查找插入与删除实验报告

顺序表的查找插入与删除实验报告

顺序表的查找插入与删除实验报告顺序表的查找、插入与删除实验报告《数据结构》实验报告一学院:班级:姓名:程序名学号:日期:一、上机实验的问题和要求:顺序表的搜寻、填入与删掉。

设计算法,同时实现线性结构上的顺序表的产生以及元素的搜寻、填入与删掉。

具体内容同时实现建议:1.从键盘输入10个整数,产生顺序表,并输入结点值。

2.从键盘输入1个整数,在顺序表搜寻该结点的边线。

若找出,输入结点的边线;若打听不到,则显示“找不到”。

3.从键盘输入2个整数,一个则表示欲填入的边线i,另一个则表示欲填入的数值x,将x挂入在对应位置上,输出顺序表所有结点值,观察输出结果。

4.从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。

二、源程序及注解:#include#include/*顺序表的定义:*/#include#definelistsize100/*表空间大小可根据实际需要而定,这里假设为100*/typedefintdatatype;/*datatype可以是任何相应的数据类型如int,float或char*/typedefstruct{datatypedata[listsize];/*向量data用作放置表中结点*/intlength;/*当前的表中长度*/}seqlist;voidmain(){seqlistl;inti,x;intn=10;/*欲建立的顺序表长度*/l.length=0;voidcreatelist(seqlist*l,intn);voidprintlist(seqlistl,intn);intlo catelist(seqlistl,datatypex);voidinsertlist(seqlist*l,datatypex,inti);voiddele telist(seqlist*l,inti);1createlist(&l,n);/*建立顺序表*/printlist(l,n);/*打印顺序表*/printf(\输入要查找的值:\scanf(\i=locatelist(l,x);/*顺序表查找*/printf(\输入要插入的位置:\scanf(\printf(\输入要插入的元素:\scanf(\insertlist(&l,x,i);/*顺序表插入*/printlist(l,n);/*打印顺序表*/printf(\输入要删除的位置:\scanf(\deletelist(&l,i);/*顺序表删除*/printlist(l,n);/*打印顺序表*/}/*顺序表的创建:*/voidcreatelist(seqlist*l,intn){inti;for(i=0;ilength=n;}/*顺序表的列印:*/voidprintlist(seqlistl,intn){inti;for(i=0;i/*顺序表的查找:*/intlocatelist(seqlistl,datatypex){inti=0;while(iif(i2/*顺序表的插入:*/voidinsertlist(seqlist*l,datatypex,inti){intj;if(i<1||i>l->length+1){printf(\插入位置非法\\n\exit(0);}if(l->length>=listsize){printf(\表空间溢出,退出运行\\n\exit(0);}for(j=l->length-1;j>=i-1;j--)l->data[j+1]=l->data[j];l->data[i-1]=x;l->length++;}/*顺序表的删除:*/voiddeletelist(seqlist*l,inti){intj;if(l->length==0){printf(\现行表为空,退出运行\\n\exit(0);}if(i<1||i>l->length){printf(\删除位置非法\\n\exit(0);}for(j=i;j<=l->length-1;j++)l->data[j-1]=l->data[j];l->length--;}3三、运行输出结果:四、调试和运行程序过程中产生的问题及采取的措施:4。

数据结构实验顺序表的基本操作

数据结构实验顺序表的基本操作

数据结构实验-顺序表的基本操作顺序表是一种线性数据结构,它的元素在内存中是连续存储的。

顺序表具有随机访问的特点,可以通过下标直接访问元素,因此在访问元素时具有较高的效率。

顺序表的基本操作包括插入、删除、查找等,下面将对这些基本操作进行详细介绍。

1. 初始化:初始化顺序表需要为其分配一定的内存空间,以存储元素。

可以使用静态分配或动态分配两种方式来初始化顺序表。

静态分配是在编译时为顺序表分配固定大小的内存空间,而动态分配是在运行时根据需要动态地为顺序表分配内存空间。

2. 插入操作:插入操作是将一个元素插入到顺序表的指定位置上。

在插入元素之前,需要判断顺序表是否已满,如果已满则需要进行扩容操作。

插入元素时,需要将插入位置以及其后的元素向后移动一位,为插入元素腾出位置。

插入操作的时间复杂度为O(n),其中n为顺序表的长度。

3. 删除操作:删除操作是将顺序表中的一个元素删除。

在删除元素之前,需要判断顺序表是否为空,如果为空则无法进行删除操作。

删除元素时,需要将删除位置后面的元素向前移动一位,覆盖删除位置上的元素。

删除操作的时间复杂度为O(n),其中n为顺序表的长度。

4. 查找操作:查找操作是根据给定的关键字,在顺序表中查找满足条件的元素。

可以使用顺序查找或二分查找两种方式进行查找。

顺序查找是从顺序表的第一个元素开始,逐个比较关键字,直到找到满足条件的元素或遍历完整个顺序表。

二分查找是在有序顺序表中进行查找,每次将待查找区间缩小一半,直到找到满足条件的元素或待查找区间为空。

查找操作的时间复杂度为O(n),其中n为顺序表的长度。

5. 修改操作:修改操作是将顺序表中的一个元素修改为新的值。

修改操作需要先进行查找操作,找到待修改的元素,然后将其值修改为新的值。

修改操作的时间复杂度为O(n),其中n为顺序表的长度。

6. 遍历操作:遍历操作是依次访问顺序表中的每个元素。

可以使用for循环或while循环进行遍历,从第一个元素开始,依次访问每个元素,直到遍历完整个顺序表。

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

实验报告一
------顺序表的插入和删除1.实验目的
1、输入一批整型数据,建立顺序表;
2、实现顺序表的插入(输入插入位置i,插入元素)
3、实现顺序表的删除(输入删除元素位置i)
4、实现顺序表中数据的显示;
5、实现顺序表中数据的查找和定位;
6、编写主函数,调试上述算法。

2.实验源代码
#include<stdio.h>
#define max 100
void sequenlist(int s[],int n) //建立一个顺序表
{
for(int i=0;i<n;i++)
{
printf("顺序表第%d个元素是:\n",i+1);
scanf("%d",&s[i]);
}
printf("所以该顺序表输出为:\n");
for(int j=0;j<n;j++)
{
printf("%d\t",s[j]);
}
putchar('\n');
}
void insert(int s[],int &n,int i,int x) //顺序表的插入{
if(n==max||i<1||i>n+1)
printf("插入失败!!!\n");
else
for(int k=n-1;k>=i-1;k--)
{
s[k+1]=s[k];
}
s[i-1]=x;
n++;
}
void dele(int s[],int &n,int i) //删除元素位置i {
if(i<1||i>n+1)
printf("无法删除!!!\n");
else
for(int j=i-1;j<n;j++)
{
s[j]=s[j+1];
}
n--;
}
void disp(int s[],int n) //输出顺序表数据{
printf("该顺序表输出为:\n");
for(int j=0;j<n;j++)
{
printf("%d\t",s[j]);
}
putchar('\n');
}
void locate(int s[],int &n,int x) //查找和定位
{
int k;
for(int j=0;j<n;j++)
{
if(s[j]==x)
k=j+1;
}
printf("您要查找的数据位于第%d位!\n",k);
}
int main()
{
int s[max];
int n;
int i,x;
int num;
printf("请输入顺序表的数据元素个数:\n");
scanf("%d",&n);
sequenlist(s,n); //顺序表的建立
printf("******************************************************\n" );
printf("*************1.插入***********************************\n");
printf("*************2.删除***********************************\n");
printf("*************3.输出***********************************\n");
printf("*************4.查找***********************************\n");
printf("******************************************************\n" );
while(1)
{
printf("请选择:\n");
scanf("%d",&num);
switch(num)
{
case 1:
printf("请选择要插入的位置:\n");
scanf("%d",&i);
printf("请选择要插入的数据:\n");
scanf("%d",&x);
insert(s,n,i,x);
break;
case 2:
printf("请选择您要删除的元素位置:\n");
scanf("%d",&i);
dele(s,n,i);
break;
case 3:
disp(s,n);
break;
case 4:
printf("请选择您要查询的元素:\n");
scanf("%d",&x);
locate(s,n,x);
break;
default:
goto l;
break;
}
}
l:return 0;
}
3.实验结果
见下图!。

相关文档
最新文档