数据结构实验报告线性表.docx
《数据结构实验报告线性表.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告线性表.docx(8页珍藏版)》请在冰点文库上搜索。
数据结构实验报告线性表
课程名称—数据结构实验名称—线性表的操作实验日期
班级—计科—姓名学号—仪器编号
实验报告要求1.实验目的2.实验要求3.实验步骤4.程序清单5.运行情况6.流程图7.实验体会
实验目的:
实验目的:
⑴熟悉线性表的定义和基本操作;
⑵掌握线性表的顺序存储结构设计与基本操作的实现。
实验任务与要求:
⑴定义线性表的顺序存储表示;
⑵基于所设计的存储结构实现线性表的基本操作;
⑶编写一个主程序对所实现的线性表进行测试;
⑷线性表的应用:
编程实现顺序表的合并
实验内容:
1、运行以下程序,理解静态分配顺序存储结构的线性表的下列基本操作。
(1)初始化顺序表
(2)创建顺序表(3)判断空表(4)求顺序表长度
(5)输出顺序表(6)取顺序表位置i的元素值(7)在顺序表中查找值为e的元素位置
(8)向顺序表中插入一个元素(9)从顺序表中删除一个元素
2、采用书上第22页定义的线性表动态分配顺序存储结构,编程实现书中算法2.3、算法2.4和算法2.5。
提示:
要实现算法2.4和2.5,必须先创建n个数据元素的顺序表,另外输出顺序表的操作也是必要的。
3、采用线性表动态分配顺序存储结构,实现顺序表的合并操作:
①设有线性表LA和LB,试设计
-可编辑修改-
算法将LA和LB归并为新的线性表LC;②设线性表L1和L2中的数据元素为整数,且均已按值非
递减有序排列,要求L3中的数据元素也按值非递减有序排列。
程序清单:
1、略
2、
#include
#include
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
#defineERROR0
#defineOK1
typedefintElemType;
typedefstruct{
int*elem;
intlength;
intlistsize;
}SqList;
intInitList_Sq(SqList&L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)returnERROR;
L.length=O;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
voidCreateList_Sq(SqList&L,intn)
{
inti;
printf("输入%d个元素:
\n",n);for(i=0;iscanf("%d",&L.elem[i]);
L.length=n;
}
voidDispList_Sq(SqListL)
{
inti;
if(L.length==0)return;
for(i=0;iprintf("%d",L.elem[i]);
printf("\n");
}
intListInsert_Sq(SqList&L,inti,ElemTypee){
ElemType*newbase;
int*p,*q;
if(i<1||i>L.length+1)returnERROR;
if(L.length>=L」istsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)returnERROR;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L」ength-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
returnOK;
}
intListDelete_Sq(SqList&L,inti,ElemType&e)
{
int*p,*q;
if(i<1||i>L.length)returnERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L」ength;
returnOK;
}
voidmain()
{
ElemTypee,a,n,x,y;
SqListL;
InitList_Sq(L);
printf("输入元素个数n:
\n");
scanf("%d",&n);
CreateList_Sq(L,n);
printf("输出顺序表所有元素:
\n");
DispList_Sq(L);
printf("插入元素的位置:
");
scanf("%d",&x);
printf("插入的元素为:
");
scanf("%d",&a);
printf("在顺序表第%d个位置插入%d\n",x,a);
ListInsert_Sq(L,x,a);
printf("输出插入操作后顺序表所有元素!
\n");
DispList_Sq(L);
printf(”删除元素的位置:
”);
scanf("%d",&y);
printf("删除顺序表第%d个位置的元素:
\n",y);
ListDelete_Sq(L,y,e);
printf("输出删除操作后顺序表所有元素:
\n");
DispList_Sq(L);
}
3、
#include
#include
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
#defineERROR0
#defineOK1
typedefintElemType;
typedefstruct{
int*elem;
intlength;
intlistsize;
}SqList;
intInitList_Sq(SqList&L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)returnERROR;
L.length=O;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
voidCreateList_Sq(SqList&L,intn)
{
inti;
printf("输入%d个元素:
\n",n);
for(i=0;iscanf("%d",&L.elem[i]);
L.length=n;
}
voidDispList_Sq(SqListL)
{
inti;
if(L.length==0)return;
for(i=0;iprintf("%d",L.elem[i]);
printf("\n");
}
voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc)
{
int*pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
Lc.listsize=Lc」ength=La」ength+Lb.length;
pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
if(!
Lc.elem)return;
pa」ast=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
}
voidmain()
{
inta,b;
SqListLa,Lb,Lc;
InitList_Sq(La);
InitList_Sq(Lb);
InitList_Sq(Lc);
printf("输入La兀素个数a:
\n");scanf("%d",&a);
CreateList_Sq(La,a);
printf("输入Lb兀素个数b:
\n");scanf("%d",&b);
CreateList_Sq(Lb,b);
printf(”输出顺序表La所有兀素:
\n");
DispList_Sq(La);
printf("输出顺序表Lb所有兀素:
\n");
DispList_Sq(Lb);
MergeList_Sq(La,Lb,Lc);
printf("输出顺序表Lc所有兀素:
\n");
DispList_Sq(Lc);
}
教师评价
优
良
中
及
格
不及
格
教师
签名
日期
江南大学物联网工程学院实验报告