实验一线性表.doc
《实验一线性表.doc》由会员分享,可在线阅读,更多相关《实验一线性表.doc(8页珍藏版)》请在冰点文库上搜索。
数据结构试验报告
线性表
学院:
姓名:
学号:
时间:
专业班级:
线性表
一、实验目的
1. 掌握线性结构中顺序表和链表的基本概念、基本操作和应用;
2. 掌握线性表的基本操作:
建表、插入、删除、输出等运算在顺序存储结构和链式存储结构上的实现。
3.通过本次实习加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。
熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现。
二、实验内容
1. 编写生成线性表的函数,线性表的元素从键盘输入,分别使用顺序和链式存储结构存储;
2.编写在线性表中插入一个元素的函数;
3.编写在线性表中删除一个元素的函数;
4.编写输出线性表的函数;
5.编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出。
三、实验报告要求
1.画出程序流程图并做简单分析
2.源代码(包括主要结构、主要语句、函数注释说明)
3.运行结果(包括程序如何使用,输入数据和输出结果)
4.实验体会和问题分析
四、基本原理
(一)线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。
例如26个英文元素的字母表(A,B,C,D,···),其数据结构的描述为:
Linear_list=(D,R)
其中,D={ai|ai属于ElemSet,i=1,2,3,···},R={|i=2,3,4,……}。
本实验是以数组的形式把线性表存放在计算机内存的一个连续的区域内,这样便有:
LOC(ai+1)=LOC(ai)+m
LOC(ai)=L0+m*(i-1)
其中,m是存放每个元素所占的内存字数,L0是a的地址,即首地址。
(二)程序说明
插入一个新元素到第i个位置,既把元素ai向后移一个位置,成为元素ai+1,把新元素放入到第i个位置,其他元素依次后移。
插入后的表长是n+1(n是原表长)。
修改第i个元素,到第i个位置是把元素ai冲掉后存上新值。
删除第i个元素就是把余后的元素依次向前移一个位置。
即:
以元素ai+1,ai+2,···,依次取代ai,ai+1,···。
删除后的表长是n-1(n是原表长)。
(三)线性表链式存储(选作)。
五、实验程序
#include
#include
#defineMAXSIZE20//数组最大界限
typedefintElemType;//数据元素类型
typedefstruct
{
ElemTypea[MAXSIZE];//一维数组子域
intlength;//表长度域
}SqList;//顺序存储的结构体类型
SqLista,b,c;
voidcreat_list(SqList*L);
voidout_list(SqListL);
voidinsert_sq(SqList*L,inti,ElemTypee);
ElemTypedelete_sq(SqList*L,inti);
intlocat_sq(SqListL,ElemTypee);//主函数
voidmain()
{
inti,k,loc;
ElemTypee,x;
charch;
do
{
printf("\n\n\n");
printf("\n1.建立线性表");
printf("\n2.插入数据元素");
printf("\n3.删除数据元素");
printf("\n4.查找数据元素");
printf("\n0.结束程序运行");
printf("\n==========================================");
printf("\n请输入你的选择(1,2,3,4,0)");
scanf("%d",&k);
switch(k)
{
case1:
{
creat_list(&a);
out_list(a);
}break;
case2:
{
printf("\n请输入插入位置:
");
scanf("%d",&i);
printf("\n请输入要插入的数据元素值:
");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}break;
case3:
{printf("\n请输入删除位置:
");
scanf("%d",&i);
x=delete_sq(&a,i);
out_list(a);
if(x!
=-1)
printf("\n删除数据元素为:
%d\n",x);
else
printf("要删除的数据元素不存在!
");
}break;
case4:
{printf("\n请输入要查找的数据元素值:
");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)
printf("\n未找到指定数据元素!
");
else
printf("\n已找到,数据元素位置是%d",loc);
}break;
}
}while(k!
=0);
printf("\n按回车键,返回...\n");
ch=getchar();
}
//建立线性表
voidcreat_list(SqList*L)
{inti;
printf("请输入线性表的长度:
");
scanf("%d",&L->length);
for(i=0;ilength;i++)
{
printf("数据元素%d=",i);
scanf("%d",&(L->a[i]));
}
}
//输出线性表
voidout_list(SqList*L)
{inti;
for(i=0;i<=L->length-1;i++)
{printf("%10d",L->a[i]);
}
}
//在线性表的第i个位置插入数据元素e
voidinsert_sq(SqList*L,inti,ElemTypee)
{
intj;
if(i<1||i>L->length)
printf("\n输入插入的位置不存在:
");
for(j=L->length;j>=i;j--)
L->a[j]=L->a[j-1];
L->a[i-1]=e;
L->length++;
}
//删除第i个数据元素,返回其值
ElemTypedelete_sq(SqList*L,inti)
{intj,y;
if(i<1||i>L->length)
return-1;
y=L->a[i-1];
for(j=i;jlength;j++)
{L->a[j-1]=L->a[j];
}
L->length--;
returny;
}
//查找值为e的元素,返回它的值
intlocat_sq(SqListL,ElemTypee)
{
inti=0;
while(i<=L.length-1&&L.a[i]!
=e)
i++;
if(i<=L.length-1)
return(i+1);
else
return(-1);
}
测试结果为:
六、实验体会和问题分析
运行结果为:
Compiling...
线性表.c
C:
\线性表.c(83):
warningC4028:
formalparameter1differentfromdeclaration
Linking...
线性表.exe-0error(s),0warning(s)
试验调试时会出现少些“;”的情况,今后一定要避免。
指导教师评语:
成绩评定: