实验一 线性表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构试验报告
线性表
学院:
姓名:
学号:
时间:
专业班级:
线性表
一、实验目的
1.掌握线性结构中顺序表和链表的基本概念、基本操作和应用;
2.掌握线性表的基本操作:建表、插入、删除、输出等运算在顺序存储结构和链式存储结构上的实现。
3.通过本次实习加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现。
二、实验内容
1.编写生成线性表的函数,线性表的元素从键盘输入,分别使用顺序和链式存储结构存储;2.编写在线性表中插入一个元素的函数;
3.编写在线性表中删除一个元素的函数;
4.编写输出线性表的函数;
5.编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出。
三、实验报告要求
1.画出程序流程图并做简单分析
2.源代码(包括主要结构、主要语句、函数注释说明)
3.运行结果(包括程序如何使用,输入数据和输出结果)
4.实验体会和问题分析
四、基本原理
(一)线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。
例如26个英文元素的字母表(A,B,C,D,···),其数据结构的描述为:
Linear_list=(D,R)
其中,D={ a i |a i属于ElemSet,i=1,2,3,···},R={| i=2,3,4,…… }。
本实验是以数组的形式把线性表存放在计算机内存的一个连续的区域内,这样便有:
LOC(a i+1)=LOC(a i)+m
LOC(a i)=L0+m*(i-1)
其中,m是存放每个元素所占的内存字数,L0是a的地址,即首地址。
(二)程序说明
插入一个新元素到第i个位置,既把元素a i向后移一个位置,成为元素a i+1,把新元素放入到第i个位置,其他元素依次后移。插入后的表长是n+1(n是原表长)。
修改第i个元素,到第i个位置是把元素a i冲掉后存上新值。
删除第i个元素就是把余后的元素依次向前移一个位置。即:以元素a i+1,a i+2,···,
依次取代a i,a i+1,···。删除后的表长是n-1(n是原表长)。
(三)线性表链式存储(选作)。
五、实验程序
#include
#include
#define MAXSIZE 20 // 数组最大界限
typedef int ElemType; //数据元素类型
typedef struct
{
ElemType a[MAXSIZE]; //一维数组子域
int length; //表长度域
}SqList; // 顺序存储的结构体类型
SqList a,b,c;
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e); //主函数
void main()
{
int i,k,loc;
ElemType e,x;
char ch;
do
{
printf("\n\n\n");
printf("\n 1.建立线性表");
printf("\n 2.插入数据元素");
printf("\n 3.删除数据元素");
printf("\n 4.查找数据元素");
printf("\n 0.结束程序运行");
printf("\n=========================================="); printf("\n 请输入你的选择(1,2,3,4,0)");
scanf("%d",&k);
switch(k)
{
case 1:{
creat_list(&a);
out_list(a);
}break;
case 2:{
printf("\n请输入插入位置:");
scanf("%d",&i);
printf("\n请输入要插入的数据元素值:");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}break;
case 3:
{printf("\n请输入删除位置:");
scanf("%d",&i);
x=delete_sq(&a,i);
out_list(a);
if(x!=-1)
printf("\n删除数据元素为:%d\n",x);
else
printf("要删除的数据元素不存在!");
}break;
case 4:
{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");