数据结构第四版 实验一:顺序表的基本操作
- 格式:doc
- 大小:50.00 KB
- 文档页数:6
竭诚为您提供优质文档/双击可除顺序表的基本操作实验报告篇一:顺序表的基本操作--实验报告实验报告附:源程序:#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;篇二:线性表的基本操作实验报告实验一:线性表的基本操作【实验目的】学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。
顺序表的基本操作实验报告一、实验目的本次实验旨在深入理解和掌握顺序表的基本操作,包括顺序表的创建、插入、删除、查找和遍历等功能,并通过实际编程实现,加深对数据结构中顺序存储结构的理解和应用能力。
二、实验环境本次实验使用的编程语言为 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。
实验一顺序表的基本操作一、实验目的掌握线性表的顺序表基本操作:建立、插入、删除、查找、合并、打印等运算。
二、实验要求包含有头文件和main函数;1.格式正确,语句采用缩进格式;2.设计子函数实现题目要求的功能;3.编译、连接通过,熟练使用命令键;4.运行结果正确,输入输出有提示,格式美观。
三、实验设备、材料和工具1.奔腾2计算机或以上机型2.turboc2,win-tc四、实验内容和步骤1. 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2. 往该顺序表中第i位置插入一个值为x的数据元素。
3. 从该顺序表中第j位置删除一个数据元素,由y返回。
4. 从该顺序表中查找一个值为e的数据元素,若找到则返回该数据元素的位置,否则返回“没有找到”。
五、程序#include<stdio.h>#include<stdlib.h>#define list_init_size 10#define increment 2typedef struct {int *elem;int length,listsize;}sqlist; //类型定义void initlist_sq(sqlist &L) //初始化顺序表{ }void output(sqlist L) //输出顺序表{ }void insertlist(sqlist &L,int i, int x) //顺序表中插入x{ }void deletelist(sqlist &L,int j, int y) //顺序表中删除y{ }int locateelem(sqlist &L,int e) //顺序表中查找e{ }void main(){ }【运行结果】void initlist_sq(sqlist &L) //初始化顺序表{L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem) exit (OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}void output(sqlist L) //输出顺序表{for(int i=0;i<=L.length-1;i++)printf("%d,",L.elem[i]);return OK;}void insertlist(sqlist &L,int i, int x) //顺序表中插入x{int p,q;if(i<1||i>L.length+1)return ERROR;if(L.length>=L.listsize){newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));if(!newbasde)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1];for(p=&(L.elem[L.length-1]);p>=q;--p*(p+1)=*p;*p=x;++L.length;return ok;}void deletelist(sqlist &L,int j, int y) //顺序表中删除y{int p,q;if(i<1||I>L.length+1) return ERROR;p=&(L.elem[i-1]);y=*p;q=L.elem+L.length-1;for(++p;p<=q;++p)*(p-1)=*p;--L.length;return ok;}int locateelem(sqlist &L,int e) //顺序表中查找e { int p;i=1;p=L.elem;while(i<=L.length&&!(*p++,e))++i;if(i<=L.length) return i;else return 0;}void main(){int d,p,a,b;int c;initlist_sq(&L);output( L);insertlist( &L, d, a);deletelist( &L, p, b);locateelem( &L, c);}。
《数据结构》实验报告一系别:班级:学号:姓名:日期:指导教师:一、上机实验的问题和要求:顺序表的查找、插入与删除。
设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。
具体实现要求:从键盘输入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");}四、运行输出结果:五、调试和运行程序过程中产生的问题及采取的措施:六、对算法的程序的讨论、分析,改进设想,其它经验教训:七、对实验方式、组织、设备、题目的意见和建议:。
元素之后的所有数据都前移一个位置,最将线性表长减1。
3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0 值。
线性表的动态分配顺序存储结构—C语言实现#define MaxSize 50//存储空间的分配量Typedef char ElemType;Typedef struct{ElemType data[MaxSize];int length; //表长度(表中有多少个元素)}SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) //初始化线性表{L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间L->length=0; //置空线性表长度为0}线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x)/*在顺序表L中第i个元素前插入新元素x*/{ if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/if (L.length>=MAXLEN)return OVERFLOW;/*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; /*将第i个元素及后续元素位置向后移一位*/L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/L.length++; /*顺序表L的长度加1*/return OK;}线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e)/*在顺序表L中删除第i个元素*{ if (i<1||i>L.length) return ERROR; /*删除位置不正确则出错*/for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/L.length--;/*顺序表L的长度减1*/return OK;}线性表元素的查找:int LocateElem(SqList *L, ElemType e) //按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++; //查找元素eif (i>=L->length) //未找到时返回0return 0;elsereturn i+1; //找到后返回其逻辑序号}输出线性表:void DispList(SqList *L) //输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false; //参数错误时返回falsee=L->data[i-1]; //取元素值return true; //成功找到元素时返回true}代码:#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;} SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)//初始化线性表{L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间L->length=0;//置空线性表长度为0 }void DestroyList(SqList *L)//销毁线性表{free(L);}bool ListEmpty(SqList *L)//判线性表是否为空表{return(L->length==0);}int ListLength(SqList *L)//求线性表的长度{return(L->length);}void DispList(SqList *L)//输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false;//参数错误时返回falsee=L->data[i-1];//取元素值return true;//成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)//按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++;//查找元素eif (i>=L->length)//未找到时返回0return 0;elsereturn i+1;//找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素{int j;if (i<1 || i>L->length+1)return false;//参数错误时返回falsei--;//将顺序表逻辑序号转化为物理序号for (j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;//插入元素eL->length++;//顺序表长度增1return true;//成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素{int j;if (i<1 || i>L->length)//参数错误时返回falsereturn false;i--;//将顺序表逻辑序号转化为物理序号e=L->data[i];for (j=i;j<L->length-1;j++)//将data[i]之后的元素前移一个位置L->data[j]=L->data[j+1];L->length--;//顺序表长度减1return true;//成功删除返回true}void main(){SqList *L;ElemType e;printf("顺序表的基本运算如下:\n");printf(" (1)初始化顺序表L\n");InitList(L);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf(" (3)输出顺序表L:");DispList(L);printf(" (4)顺序表L长度=%d\n",ListLength(L));printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf(" (6)顺序表L的第3个元素=%c\n",e);实验结果:心得体会:通过本次实验,实现了数据结构在程序设计上的作用,了解了数据结构语言,加深了对c语言的认识掌并掌握了线性表的顺序存储结构的表示和实现方法,掌握顺序表基本操作的算法实现,同时了解了顺序表的应用。
顺序表的基本操作实验报告一、实验目的。
本实验旨在通过对顺序表的基本操作进行实验,加深对顺序表的理解,掌握顺序表的基本操作方法,提高编程实践能力。
二、实验内容。
1. 初始化顺序表,包括建立空的顺序表和建立有元素的顺序表。
2. 插入元素,在指定位置插入元素。
3. 删除元素,删除指定位置的元素。
4. 查找元素,根据元素值查找元素所在位置。
5. 输出顺序表,将顺序表中的元素依次输出。
三、实验步骤。
1. 初始化顺序表。
(1)建立空的顺序表,首先定义一个顺序表的结构体,包括数据存储区和表长两个成员变量。
然后通过动态内存分配为顺序表分配存储空间,并初始化表长为0,即建立了一个空的顺序表。
(2)建立有元素的顺序表,定义一个包含初始元素的数组,然后将数组中的元素依次复制到顺序表的数据存储区中,并更新表长。
2. 插入元素。
在指定位置插入元素时,需要先判断插入位置是否合法,然后将插入位置后的元素依次后移,为插入元素腾出位置,并更新表长。
3. 删除元素。
删除指定位置的元素时,同样需要先判断删除位置是否合法,然后将删除位置后的元素依次前移,覆盖被删除的元素,并更新表长。
4. 查找元素。
根据元素值查找元素所在位置时,需要遍历顺序表中的元素,逐个比较元素值,找到匹配的元素位置后返回位置信息。
5. 输出顺序表。
将顺序表中的元素依次输出时,可以通过循环遍历顺序表中的元素,并逐个输出。
四、实验结果与分析。
经过实验操作,成功实现了顺序表的初始化、插入、删除、查找和输出等基本操作。
通过对顺序表的操作,加深了对顺序表结构和操作方法的理解,掌握了顺序表的基本操作技巧。
在实际编程中,顺序表的基本操作是非常常见的,对于处理线性表数据具有重要意义。
五、实验总结。
通过本次实验,深入理解了顺序表的基本操作方法,掌握了顺序表的初始化、插入、删除、查找和输出等操作技巧。
在今后的学习和工作中,将能更加熟练地运用顺序表的基本操作,提高编程实践能力,为实际问题的解决提供更加有效的数据结构支持。
实验一顺序表的基本操作一、实验目的1.掌握使用结构体定义线性表的基本方法;2.掌握线性表的基本操作:初始化、建立、显示、判断空、判断满、插入、删除等运算在顺序存储结构上的实现。
二、实验内容1.用结构体定义线性表2.实现初始化、建立、显示、判断空、判断满、求表长、查找、插入、删除等基本操作三、实验要求1.认真阅读和理解本实验的程序。
2.上机输入、调试、运行下列程序。
/*#include<stdio.h>#include<conio.h> */#define MAXSIZE 100#define FALSE 0#define TRUE 1/* 定义ElemType为int类型*/typedef int ElemType;/*顺序表存储空间的总分配量*//* 顺序存储类型*/typedef struct{ElemType data[MAXSIZE]; /*存放线性表的数组*/int length; /* length是顺序表的长度*/}SqList;SqList L;/* 初始化顺序表*/SqList SqListInit( ){SqList L;L.length=0;return L;}/* 追加顺序表*/SqList ListCreate(SqList L){ int i,n;printf("请输入数字个数");scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&L.data[i]); L.length++;} return L;}/* 求顺序表长度*/int ListLength(SqList L){return(L.length);}/* 检查顺序表是否为空*/int ListEmpty(SqList L){if(L.length) return(FALSE);else return(TRUE);}/*检查顺序表是否为满*/int ListFull(SqList L){if(L.length==MAXSIZE) return(TRUE);else return(FALSE);}/* 显示遍历顺序表*/void ListTraverse(SqList L){int i;if(L.length<=0) printf("顺序表为空\n");else {printf("当前顺序表中的元素为:\n");for(i=0;i<L.length;i++) printf("%d ",L.data[i]); printf("\n");}}/* 从顺序表中查找元素*/ElemType ListGet(SqList L ,int i){ElemType e;e=L.data[i-1]; return(e);}/* 从顺序表中查找与给定元素值相同的元素在顺序表中的位置*/ int ListLocate(SqList L, ElemType x){int i=0;while(i<L.length && L.data[i]!=x)i++;if (i<L.length) return (i+1);else return 0;}/* 向顺序表中插入元素*/SqList ListInsert(SqList L,int i,ElemType x){int j;if(L.length==MAXSIZE)printf("表满,不能插入\n");else if(i<1||i>L.length+1)printf("插入位置不正确\n");else { for(j=L.length-1;j>=i-1;j--)L.data[j+1]=L.data[j];L.data[i-1]=x;L.length++;}return L;}/* 从顺序表中删除元素*/SqList ListDelete(SqList L,int i){int j;ElemType x;if (i<1||i>L.length)printf("删除位置不正确\n");else {x=L.data[i-1];for(j=i;j<=L.length-1;j++)L.data[j-1]=L.data[j];L.length--;printf("%d已被删除\n",x);}return L;}/*顺序表逆序排列 */SqList nixu(SqList L){ int j,t;for(j=0;j<L.length/2;j++){t=L.data[j];L.data[j]=L.data[L.length-1-j]; L.data[L.length-1-j]=t;}return L;}int scan(){int d;printf("1. 顺序表的初始化 2.连续追加元素建表 3.求顺序表长度\n");printf("4. 检查顺序表是否为空 5.检查顺序表是否为满 6.显示顺序表\n");printf("7. 从顺序表中查找元素 8.给定元素值找位置 9.向顺序表中插入元素\n"); printf("10.从顺序表中删除元素 11.逆序其他键退出......\n"); printf("\n");printf("\n\n请选择所要进行的操作\n");scanf("%d",&d);return(d);}main(){int quit=0;int i,location;ElemType e,prior,next;printf("第一次操作需选择初始化\n\n\n");while(!quit){switch(scan()){case 1:L=SqListInit(); printf("\n\n线性表已经初始化!\n\n\n");break;case 2:L=ListCreate(L);break;case 3:printf("顺序表的长度为%d\n",L.length);break;case 4:if(ListEmpty(L))printf("顺序表为空\n");else printf("顺序表不为空\n");break;case 5:if(ListFull(L))printf("顺序表满\n");else printf("顺序表不满\n");break;case 6:ListTraverse(L);break;case 7:printf("请输入要查找的元素的位置\n");scanf("%d",&i);if(L.length==0) printf("顺序表已空\n");else if(i<=0||i>L.length) printf("查找的位置不正确\n");else printf("顺序表中第%d个元素的值为:%d\n",i,ListGet(L,i));break;case 8:printf("请输入要查找的元素的值\n");scanf("%d",&e);if(L.length==0) printf("顺序表已空\n");else{location=ListLocate(L,e);if(location==0) printf("顺序表中不存在值为%d的元素\n",e);else printf("顺序表中%d的位置是:%d\n",e,ListLocate(L,e));}break;case 9:printf("请输入要插入的元素的位置和其值:\n");scanf("%d%d",&i,&e);L=ListInsert(L,i,e);break;case 10:printf("请输入要删除的元素的位置:\n");scanf("%d",&i);L=ListDelete(L,i);break;case 11:L=nixu(L) ; break;default:quit=1;}/*getchar();getchar();clrscr(); */}}四、写出该程序的功能和运行结果。
顺序表的基本操作和实现实验报告顺序表的基本操作和实现实验报告引言顺序表是一种常用的数据结构,它能够在连续的存储空间中存储元素,并通过索引来访问和修改这些元素。
本实验旨在通过实现基本操作,包括插入、删除、获取等,来深入理解顺序表的原理和实现方式。
实验目的1.掌握顺序表的基本操作2.理解顺序表的实现原理3.学习使用编程语言实现顺序表实验过程1.创建顺序表–使用数组作为底层存储结构,设置一个指针指向数组的起始位置,并初始化顺序表的长度为0。
2.插入元素–通过移动元素的方式,在指定位置插入一个新元素。
–更新顺序表的长度。
3.删除元素–通过覆盖元素的方式,删除指定位置的元素。
–更新顺序表的长度。
4.获取元素–根据指定位置,返回对应的元素。
5.更新元素–根据指定位置,修改对应的元素的值。
–不改变顺序表的长度。
6.打印顺序表–遍历顺序表中的元素,并输出到控制台。
实验结果根据以上操作,我们成功实现了一个顺序表,并在各基本操作上进行了测试和验证。
实验结果表明,顺序表能够高效地支持元素的插入、删除、获取和更新等操作,并能够正确地保存和展示数据。
实验总结通过本次实验,我们深入学习了顺序表的基本操作和实现方式。
顺序表作为一种简单而有用的数据结构,在实际应用中有着广泛的应用。
同时,我们也体会到了数据结构与算法的设计和实现的重要性,它们对于程序性能和可读性都有着关键的影响。
参考文献1.《数据结构与算法分析》2.《算法导论》3.《C++ Primer》实验环境•编程语言: C++•开发环境: Visual Studio Code•操作系统: Windows 10实验步骤1.创建顺序表的类SeqList,并定义私有属性int* data和intlength。
2.定义构造函数SeqList(int size),用于初始化顺序表的大小。
3.实现插入元素的方法void insert(int pos, int value),根据指定位置和值,在顺序表中插入新元素。
实验一:顺序表的基本操作
【实验目的】
1、掌握建立顺序表的基本方法。
2、理解和掌握顺序表元素查找算法
3、掌握顺序表的插入算法的思想和实现。
4、掌握顺序表的删除算法的思想和实现
【实验内容】
1、建立一个顺序表,要求从键盘输入10个整数,并将该顺序表的元素从屏幕显
示出来。
2、用函数实现在顺序表中查找其中一个元素,如果找到,返回该元素在顺序表
中的位置和该元素的值,否则提示无此元素。
3、用函数实现顺序表的插入和删除操作。
由用户输入待插入元素及插入位置,
将完成插入后的顺序表输出;由用户输入删除第几个元素,将完成删除后的顺序表输出。
【实验源代码】
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
#include "seqlist.h"
typedef struct
{
int *k;
int length;
}SqList;
main()
{SqList a;
int i,x,y;
int ListInsert_Sq(SqList &L,int i,int e);
printf("请输入顺序表长度");
scanf("%d",&a.length);
a.k=(int*)malloc(sizeof(int)*a.length); for(i=0;i<=a.length-1;i++)
{a.k[i]=rand()%100;
printf("%d ",a.k[i]);
}
printf("\n请输入要插入的位置和元素\n"); scanf("%d %d",&i,&x);
y=ListInsert_Sq(a,i,x);
for(i=0;i<a.length;i++)
printf("%d ",a.k[i]);
}
int ListInsert_Sq(SqList &L,int i,int e) {int j;
for(j=L.length;j>=i;j--)
L.k[j+1]=L.k[j];
L.k[i]=e;
++L.length;
return 1;
}
头文件:"seqlist.h"
typedef struct
{
datatype list[maxsize];
int size;
}seqlist;
void ListInitiate(SeqList *L) //初始化顺序表L
{
L->size=0; //定义初始数据元素个数
}
int ListLength(SeqList L) //返回顺序表L的当前数据元素个数
{
return L.size;
}
int ListInsert(SeqList *L,int i,int x) //在顺序表L的第i(0<=i<=size)个位置前插入数据元素值x
{int j;
if (L->size>=10) //插入成功返回1,插入失败返回0
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1]; //从后面向前一次后以数据,未插入做准备L->list[i]=x; //插入x
L->size ++; //元素个数加1
return 1;
}
}
int ListDelete(SeqList *L,int i,int *x);
{
int j;
if(L->size<=0)
printf("顺序表已空无数据元素可删!\n");
return 0;
}
else
{
*x=L->list[i];
for(j=i+1;j<=L->list-1;j++)
L->list[j-1]=L->list[j];
L->list--;
return 1;
}
}
int ListGet(SeqList L,int i,int *x) {
if(i<0||i>L。
size-1)
{
printf("参数i不合格!\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
【实验结果】
【实验心得】。