实验一线性表Word下载.doc
《实验一线性表Word下载.doc》由会员分享,可在线阅读,更多相关《实验一线性表Word下载.doc(8页珍藏版)》请在冰豆网上搜索。
三、实验报告要求
1.画出程序流程图并做简单分析
2.源代码(包括主要结构、主要语句、函数注释说明)
3.运行结果(包括程序如何使用,输入数据和输出结果)
4.实验体会和问题分析
四、基本原理
(一)线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。
例如26个英文元素的字母表(A,B,C,D,·
·
),其数据结构的描述为:
Linear_list=(D,R)
其中,D={ai|ai属于ElemSet,i=1,2,3,·
},R={<
ai-1,ai>
|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<
stdio.h>
stdlib.h>
#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"
);
\n1.建立线性表"
\n2.插入数据元素"
\n3.删除数据元素"
\n4.查找数据元素"
\n0.结束程序运行"
\n=========================================="
\n请输入你的选择(1,2,3,4,0)"
scanf("
%d"
&
k);
switch(k)
case1:
creat_list(&
a);
out_list(a);
}break;
case2:
\n请输入插入位置:
"
i);
\n请输入要插入的数据元素值:
e);
insert_sq(&
a,i,e);
case3:
{printf("
\n请输入删除位置:
x=delete_sq(&
a,i);
if(x!
=-1)
\n删除数据元素为:
%d\n"
x);
else
要删除的数据元素不存在!
case4:
\n请输入要查找的数据元素值:
loc=locat_sq(a,e);
if(loc==-1)
\n未找到指定数据元素!
\n已找到,数据元素位置是%d"
loc);
}
}while(k!
=0);
\n按回车键,返回...\n"
ch=getchar();
//建立线性表
voidcreat_list(SqList*L)
{inti;
printf("
请输入线性表的长度:
scanf("
L->
length);
for(i=0;
i<
length;
i++)
{
printf("
数据元素%d="
i);
scanf("
(L->
a[i]));
}
//输出线性表
voidout_list(SqList*L)
=L->
length-1;
{printf("
%10d"
L->
a[i]);
//在线性表的第i个位置插入数据元素e
voidinsert_sq(SqList*L,inti,ElemTypee)
intj;
if(i<
1||i>
length)
\n输入插入的位置不存在:
for(j=L->
j>
=i;
j--)
a[j]=L->
a[j-1];
a[i-1]=e;
length++;
//删除第i个数据元素,返回其值
ElemTypedelete_sq(SqList*L,inti)
{intj,y;
if(i<
return-1;
y=L->
a[i-1];
for(j=i;
j<
j++)
{L->
a[j-1]=L->
a[j];
length--;
returny;
//查找值为e的元素,返回它的值
intlocat_sq(SqListL,ElemTypee)
inti=0;
while(i<
=L.length-1&
&
L.a[i]!
=e)
i++;
=L.length-1)
return(i+1);
return(-1);
测试结果为:
六、实验体会和问题分析
运行结果为:
Compiling...
线性表.c
C:
\线性表.c(83):
warningC4028:
formalparameter1differentfromdeclaration
Linking...
线性表.exe-0error(s),0warning(s)
试验调试时会出现少些“;
”的情况,今后一定要避免。
指导教师评语:
成绩评定: