《线性表的顺序存储》实验报告
实验报告 线性表的顺序存储结构

**大学实验报告学院:专业:班级:
实
验
总
结
1、线性表的初始化为一个空表时,要明确给空(l.list==NULL)
2、线性表的插入、删除操作前都要进行非法位置的剔除
3、插入、删除等操作非法时,一定要有返回值(return false),否则操作会出现错误
4、程序编写过程中,要注意细节部分,减少错误的产生,减少调试时间
指
导
教
师
意
见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。
表格内容可根据内容扩充。
(资料素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。
验证性实验一 线性表的顺序存储实验

验证性实验一线性表的顺序存储实验实验课程名:数据结构专业班级:学号:姓名:实验时间:实验地点:指导教师:一、实验目的和要求1、掌握用Visual C++6.0上机调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现二、实验内容1、顺序表基本操作的实现。
要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。
#include<stdio.h>#include<string.h>#include<conio.h>#include<iostream.h>#include<malloc.h>#define LIST_INIT_SIZE 10#define OK 1#define ERROR 0#define LISTINCREMENT 10typedef int ElemType;typedef struct{ int *elem;int length;int listsize;}SqList;int InitList_Sq(SqList &L) //InitList_Sq() function{ //Inititial a Sq_ListL.elem=(ElemType *)malloc(LIST_INIT_SIZE *sizeof(ElemType));if (!L.elem) return(0);L.length=0;L.listsize=LIST_INIT_SIZE;return(1);}//end of InitList_Sq() functionint ListInsert_sq(SqList &L,int i,int e)//ListInsert_sq(){ if(i<1||i>L.length+1) //i (location) is illegal{ cout <<"Initial failure!"<<endl;getch();return (ERROR);}if(L.length>=L.listsize) //insert into the end of the Sqlist{ int *Newbase;Newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));if(!Newbase){ cout<<"Overflow!"<<endl;getch();return (ERROR);}L.elem=Newbase;L.listsize+=LISTINCREMENT;}int *p,*q;q=&(L.elem[i-1]); //q point at the element before the inserted onefor(p=&(L.elem[L.length-1]);p>=q;--p) //move the element*(p+1)=*p;*q=e;++L.length;return (OK);} //ListInser_sq() endvoid main(){ int m,i,x;SqList A;InitList_Sq(A);cout<<"Input the size of A:\n"<<endl;cin>>m;cout<<"Input the element of A:\n";for(i=1;i<=m;i++){cin>>x;ListInsert_sq(A,i,x);}cout<<"The element of A:"<<endl;for(i=0;i<A.length;i++)cout<<A.elem[i]<<'\t';cout<<endl;}实验结果:(本人运行程序得到实验截图)实验结果分析:本程序中首先定义了一个链表的结构体,然后定义了一个线性表,在插入函数中先申请了一个与头文件中定义的线性表大小相同的内存空间,然后用if语句判断这个线性表是否存在,若不存在则返回0,若存在则将线性表的长度设置为与申请的空间大小相同。
数据结构实验线性表的顺序存储结构

南昌航空大学实验报告课程名称:数据结构实验名称:实验一线性表的链式存储结构班级:080611 学生姓名:冯武明学号:16 指导教师评定:XXX 签名: XXX题目:设计并实现以下算法:给出用单链表存储多项式的结构,利用后接法生成多项式的单链表结构,实现两个多项式相加的运算,并就地逆置相加后的多项式链式。
一、需求分析⒈先构造两个多项式链表,实现两个多项式的和及删除值为零元素的操作,不同用户输入的多项式不同。
⒉在演示过程序中,用户需敲击键盘输入值,即可观看结果。
⒊程序执行的命令包括:(1)构造多项式链表A (2)构造多项式链表B (3)求两张链表的和(4)删除值为零元素,即不创建链表。
二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADT Stack {数据对象:D={a i:|a i∈ElemSet,i=1…n,n≥0}数据关系:R1={<a i-1,a i>|a i-1,a i∈D,i=2,…n≥0}基本操作:init(linklist *L)操作结果:destroylist(List *L)clearlist(List *L)初始条件:线性表L已经存在,1≤i≤ListLength(&L)操作结果:用e返回L中第i个数据元素的值。
insfirst(link h,link s)初始条件:数据元素e1,e2存在操作结果:以e1,e2中的姓名项作为判定e1,e2是否相等的依据。
delfirst(link h,link *q)初始条件:数据元素e1,e2存在操作结果:以e1,e2中的姓名项(为字符串)的≤来判定e1,e2是否有≤的关系。
append(linklist *L,link s)初始条件:线性表La已经存在操作结果:判断La中是否有与e相同的元素。
remove(linklist *L,link *q)初始条件:非递减线性表La,Lb已经存在操作结果:合并La,Lb得到Lc,Lc仍按非递减有序排列。
数据结构实验报告-实验:1线性表的顺序存储和操作实现

}
for(inti=pos-1;i<length;i++)
if(listArray[i].equals(obj))returni+1;
return-1;
}
publicbooleanmodify(Object obj,intpos){
if(pos<1||pos>length){
List sort();
}
publicclasssequenceListimplementsList {
finalintmaxSize=10;
privateintlength;
privateObject[]listArray;
publicsequenceList(){//无参数的构造函数的定义
length=0;//线性表初始为空,即长度为0
System.out.println();
list2.preOrder();
System.out.println("线性表list2长度:"+list2.size());
}
}
publicinterfaceList {
Object value(intpos);
booபைடு நூலகம்eanadd(Object obj,intpos);
int[] a={20,16,38,42,29};
for(inti=0;i<a.length;i++) list1.add(a[i], i+1);
intn1=(Integer)list1.remove(2);
list1.add(80, 3);
intn2=(Integer)list1.value(4);
实验二 线性表的顺序存储

实验报告二线性表的顺序存储班级: 2010251 姓名:李鑫学号: 20103277 专业:信息安全一、实验目的:(1)掌握顺序表的基本操作的实现方法。
(2)应用顺序表的基本算法实现集合A=AUB算法。
(3)应用顺序表的基本算法实现两有序顺序表的归并算法。
二、实验内容:1、线性表顺序存储结构的基本操作算法实现(要求采用类模板实现)[实现提示] (同时可参见教材p5822-p60页算法、ppt)函数、类名称等可自定义,部分变量请加上学号后3位。
库函数载和常量定义:(代码)#include <iostream.h>#include <stdlib.h>(1)顺序表存储结构的定义(类的声明):(代码)const int MaxSize=100;template <class datatype> //定义模板类SeqListclass SeqList{public:SeqList( ); //无参构造函数SeqList(datatype a[ ], int n); //有参构造函数~SeqList(){}; //析构函数为空int Length(); //求线性表的长度datatype Get(int i); //按位查找,取线性表的第i个元素int Locate(datatype item); //查找元素itemvoid Insert(int i, datatype item); //在第i个位置插入元素itemdatatype Delete(int i); //删除线性表的第i个元素void display(); //遍历线性表,按序号依次输出各元素int isEmpty();int qianqu(int i,datatype item);int houji(int i,datatype item);private:datatype data[MaxSize]; //存放数据元素的数组int length; //线性表的长度};(2)初始化顺序表算法实现(不带参数的构造函数)/**输入:无*前置条件:顺序表不存在*功能:构建一个顺序表*输出:无*后置条件:表长为0*/实现代码:template <class datatype>SeqList<datatype>:: SeqList( ){length=0;}(3)顺序表的建立算法(带参数的构造函数)/**输入:顺序表信息的数组形式a[],顺序表长度n*前置条件:顺序表不存在*功能:将数组a[]中元素建为长度为n的顺序表*输出:无*后置条件:构建一个顺序表*/实现代码:template <class datatype>SeqList<datatype>:: SeqList(datatype a[], int n) {if (n>MaxSize) throw "数组元素个数不合法";for (int i=0; i<n; i++)data[i]=a[i];length=n;}(4)在顺序表的第i个位置前插入元素e算法/**输入:插入元素e,插入位置i*前置条件:顺序表存在,i要合法*功能:将元素e插入到顺序表中位置i处*输出:无*后置条件:顺序表插入新元素,表长加1*/实现代码:template <class datatype>void SeqList<datatype>::Insert(int i, datatype item) {int j;if (length>=MaxSize) throw “溢出";if (i<1 || i>length+1) throw “i不合法!";for (j=length; j>=i; j--)data[j]=data[j-1];data[i-1]=item;length++;}(5)删除线性表中第i个元素算法/**输入:要删除元素位置i*前置条件:顺序表存在,i要合法*功能:删除顺序表中位置为i的元素*输出:无*后置条件:顺序表册除了一个元素,表长减1*/实现代码:template <class datatype>datatype SeqList<datatype>::Delete(int i){int item,j;if (length==0) throw “表为空,无法删除元素!";if (i<1 || i>length) throw “i不合法!";item=data[i-1];//获得要删除的元素值for (j=i; j<length; j++)data[j-1]=data[j]; //注意数组下标从0记length--;return item;}(6)遍历线性表元素算法/**输入:无*前置条件:顺序表存在*功能:顺序表遍历*输出:输出所有元素*后置条件:无*/实现代码:template <class datatype>void SeqList<datatype>::display(){for(int i=0;i<length;i++)cout<<data[i]<<" ";cout<<endl;}(7)获得线性表长度算法/**输入:无*前置条件:顺序表存在*功能:输出顺序表长度*输出:顺序表长度*后置条件:无*/实现代码:template <class datatype>int SeqList<datatype>::Length(){return length;}(8)在顺序线性表中查找e值,返回该元素的位序算法/**输入:查询元素值e*前置条件:顺序表存在*功能:按值查找值的元素并输出位置*输出:查询元素的位置*后置条件:无*/实现代码:template <class datatype>int SeqList<datatype>::Locate(datatype item){for (int i=0; i<length; i++)if (data[i]==item)return i+1 ;//下标为i的元素等于item,返回其序号i+1 return 0; //查找失败}(9)获得顺序线性表第i个元素的值/**输入:查询元素位置i*前置条件:顺序表存在,i要合法*功能:按位查找位置为i的元素并输出值*输出:查询元素的值*后置条件:无*/实现代码:template <class datatype>datatype SeqList<datatype>::Get(int i){if (i<1 || i>length) throw "i不合法!";else return data[i-1];}(10)判表空算法/**输入:无*前置条件:无*功能:判表是否为空*输出:为空返回1,不为空返回0*后置条件:无*/实现代码:template <class datatype>int SeqList<datatype>::isEmpty(){if(length==0) return 1;return 0;}(11)求直接前驱结点算法/**输入:要查找的元素e,待存放前驱结点值e1*前置条件:无*功能:查找该元素的所在位置,获得其前驱所在位置。
数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构数据结构实验报告1线性表的顺序存储结构第一章引言线性表是计算机中最常见的数据结构之一,它是一种有序的数据元素集合,其中的数据元素之间具有一对一的关系。
线性表的存储结构有多种方式,其中顺序存储结构是最简单的一种,它使用一段连续的存储单元来存储线性表中的元素。
第二章顺序存储结构的定义顺序存储结构是将线性表中的元素按照其逻辑顺序依次存储在一块连续的存储空间中。
顺序存储结构的特点是可以快速地访问任意位置的元素,但插入和删除操作需要移动大量的元素。
第三章顺序存储结构的实现1.存储空间的分配顺序存储结构通常使用数组来实现,数组的长度应该大于等于线性表的长度,以防止溢出。
存储空间的分配可以使用静态分配或动态分配两种方式来实现。
2.线性表的初始化初始化线性表时,需要设置线性表的长度和当前元素的个数。
3.线性表的增删改查操作●插入操作:________在指定位置插入一个元素时,需要将插入位置之后的元素依次后移,给待插入的元素腾出位置。
●删除操作:________删除指定位置的元素时,需要将删除位置之后的元素依次前移,覆盖删除位置上的元素。
●修改操作:________修改指定位置的元素时,直接对该位置上的元素进行修改即可。
●查找操作:________根据指定的元素值,查找其在顺序存储结构中的位置。
4.线性表的遍历操作遍历操作可以按照顺序访问线性表中的每个元素,可以使用循环结构实现遍历操作。
第四章顺序存储结构的优缺点分析1.优点:________可以快速地访问任意位置的元素,节省存储空间。
2.缺点:________插入和删除操作需要移动大量的元素,不适用于频繁插入和删除的场景。
第五章实验过程和结果分析在本次实验中,我们以顺序存储结构为基础,实现了线性表的增删改查操作,并进行了遍历操作。
通过实验,我们发现顺序存储结构在查询操作上有较好的性能,但在插入和删除操作上的性能较差。
第六章附件本文档涉及的附件详见附件文件。
《线性表的顺序存储》实验报告

《线性表的顺序存储》实验报告1.需解决的的问题利用顺序表,设计一组输入数据。
2.数据结构的定义typedefstruct{ElemType *elem;int length;intlistsize;}SqList;3.程序的结构图4.函数的功能1)初始化一个空顺序表voidInitSqList(SqList *L){L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem) exit(OVERFLOW);L->length=0;L->listsize=LIST_INIT_SIZE;}2)输入元素voidPushSqList(SqList *L){inti;printf("input the length of the list:");scanf("%d",&L->length);printf("input the sqlist:");for(i=0;i<L->length;i++){printf("input the %dth number:",i+1);scanf("%d",&L->elem);}}3)在指定位置插入一个指定的元素voidInsertSqList(SqList *L,inti,ElemType x){ElemType *newbase;intn,m;if(i<1||i>L->length+1){printf("ERROR!");}if(L->length>=L->listsize){newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase) exit(OVERFLOW);L->elem=newbase;L->listsize+=LISTINCREMENT;}else{for(n=L->length;n>=i;n--){++L->length;L->elem[n]=L->elem[n-1];}L->elem[i-1]=x;printf("the list is:");for(m=0;m<L->length+1;n++)printf("%d",L->elem[n]);}}4)删除指定位置的元素voidDelSqList(SqList *L,inti){ElemType *p,*q;ElemType x;int n;if(i<1||i>L->length)printf("ERROR!");p=&(L->elem[i-1]);x=*p;for(q=p;q<&(L->elem[L->length-1]);q++)*q=*(q+1);L->length--;printf("the element which is delete is %d",x);printf("the list is:");for(n=0;n<L->length-1;n++)printf("%d",L->elem[n]);}5)将顺序表中所有的元素颠倒voidChangeoverSqList(SqList *L){SqList S;inti,j;if(L->length==L->listsize)S.elem=(ElemType*)malloc(L->length*sizeof(ElemType));if(!S.elem) exit(OVERFLOW);else{for(i=0;i<L->length;i++)S.elem[i]=L->elem[L->length-i-1];for(i=0;i<L->length;i++)L->elem[i]=S.elem[i];}printf("the list is:");for(j=0;j<L->length;i++)printf("%d",L->elem[i]);}6)按顺序输出表中元素voidPrintSqList(SqList *L){inti;for(i=0;i<L->length;i++)printf("%d ",L->elem[i]);}7)摧毁顺序表voidDestroySqList(SqList *L){if(L->elem) free(L->elem);}8)清空顺序表voidClearSqList(SqList *L){L->length=0;}9)查找指定位置的元素,并返回该元素的值intGetElem(SqList *L,inti){ElemType x;if(i<1||i>L->length+1) {printf("ERROR!");}else{x=L->elem[i-1];printf("the elem is %d",x);}}5.输入/输出数据1)创建一个顺序表,先输入表长度,然后输入数据2)选择菜单,进行不同操作选‘1’,在指定位置插入指定元素选‘2’,删除指定位置的元素选‘3’,颠倒顺序表中元素的顺序选‘4’,按顺序输出表中的元素选‘5’,摧毁顺序表选‘6’,清空线性表选‘7’,输出当前顺序表的长度选‘8’,输出指定位置的元素选‘9’,退出该程序6.总结这个实验让我更好的掌握了在线性表的顺序存储中如何初始化,如何进行输入输出的处理,以及各种常用功能是怎样实现的。
数据结构实验报告-线性表的顺序存储

姓 名
专业班级
实验地点
指导教师
实验时间
一、实验目的及要求
本次实验目的是通过上机练习,熟悉和掌握课堂所讲授的基本知识点。要求上机以前要认真复习课堂教学内容。完成教师带领实验,完成线性表的顺序存储实验。
二、实验设备(环境)及要求
计算机;学生不许把食物带到机房吃;不许上网做与实验无关的内容;不许同学之间聊天;保持实验室安静卫生。下课把键盘,座椅放回原处。
Integer length;/*当前线性表长度,线性表中现有元素个数*/
Integer listsize;/*当前分配的存储量以下定义线性表的操作*/
Integer InitList(Class_List *SqList)
/*构造一个空的线性表*/
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Integer;
typedef char *String;
typedef struct
{
Integer number;
String name[10];
Integer age;
String interest[50];
完成一个有多于3个学生的线性表。并且显示学生信息。删除其中一个学生。然后再打印显示。
Source.cpp
#include"header.h"
void main()
{
Class_List xinji2013;
InitList(&xinji2013);
Student st;
Integer i,n=2,w,q,e;
三、实验内容与步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《线性表的顺序存储》实验报告1.需解决的的问题
利用顺序表,设计一组输入数据。
2.数据结构的定义
typedefstruct{
ElemType *elem;
int length;
intlistsize;
}SqList;
3.程序的结构图
4.函数的功能
1)初始化一个空顺序表
voidInitSqList(SqList *L){
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
}
2)输入元素
voidPushSqList(SqList *L){
inti;
printf("input the length of the list:");
scanf("%d",&L->length);
printf("input the sqlist:");
for(i=0;i<L->length;i++){
printf("input the %dth number:",i+1);
scanf("%d",&L->elem);
}
}
3)在指定位置插入一个指定的元素
voidInsertSqList(SqList *L,inti,ElemType x){
ElemType *newbase;
intn,m;
if(i<1||i>L->length+1){
printf("ERROR!");
}
if(L->length>=L->listsize){
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
else{
for(n=L->length;n>=i;n--)
{
++L->length;
L->elem[n]=L->elem[n-1];
}
L->elem[i-1]=x;
printf("the list is:");
for(m=0;m<L->length+1;n++)
printf("%d",L->elem[n]);
}
}
4)删除指定位置的元素
voidDelSqList(SqList *L,inti){
ElemType *p,*q;
ElemType x;
int n;
if(i<1||i>L->length)
printf("ERROR!");
p=&(L->elem[i-1]);
x=*p;
for(q=p;q<&(L->elem[L->length-1]);q++)
*q=*(q+1);
L->length--;
printf("the element which is delete is %d",x);
printf("the list is:");
for(n=0;n<L->length-1;n++)
printf("%d",L->elem[n]);
}
5)将顺序表中所有的元素颠倒
voidChangeoverSqList(SqList *L){
SqList S;
inti,j;
if(L->length==L->listsize)
S.elem=(ElemType*)malloc(L->length*sizeof(ElemType));
if(!S.elem) exit(OVERFLOW);
else{
for(i=0;i<L->length;i++)
S.elem[i]=L->elem[L->length-i-1];
for(i=0;i<L->length;i++)
L->elem[i]=S.elem[i];
}
printf("the list is:");
for(j=0;j<L->length;i++)
printf("%d",L->elem[i]);
}
6)按顺序输出表中元素
voidPrintSqList(SqList *L){
inti;
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
}
7)摧毁顺序表
voidDestroySqList(SqList *L)
{
if(L->elem) free(L->elem);
}
8)清空顺序表
voidClearSqList(SqList *L){
L->length=0;
}
9)查找指定位置的元素,并返回该元素的值intGetElem(SqList *L,inti){
ElemType x;
if(i<1||i>L->length+1) {
printf("ERROR!");
}
else{
x=L->elem[i-1];
printf("the elem is %d",x);
}
}
5.输入/输出数据
1)创建一个顺序表,先输入表长度,然后输入数据
2)选择菜单,进行不同操作
选‘1’,在指定位置插入指定元素
选‘2’,删除指定位置的元素
选‘3’,颠倒顺序表中元素的顺序选‘4’,按顺序输出表中的元素选‘5’,摧毁顺序表
选‘6’,清空线性表
选‘7’,输出当前顺序表的长度
选‘8’,输出指定位置的元素
选‘9’,退出该程序
6.总结
这个实验让我更好的掌握了在线性表的顺序存储中如何初始化,如何进行输入输出的处理,以及各种常用功能是怎样实现的。
在顺序存储中,我们应该注意内存分配的问题,如果需要处理的数据量较大,申请的初始内存不够,我们就需要增加分配存储空间。