数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一
一.实验题目:线性表的综合操作
二.实验目的:
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。线性表是最基本的线性结构,任何线性结构都可以用线性表表示。线性表的结构在信息检索、程序设计语言的编译等许多方面有广泛的应用。本次设计主要是运用线性表的插入、删除、查找和排序,并运用C语言的一些知识编写出程序使算法得以实现。
三.设计分析
3.1 线性表的结构特点
1)均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数所类长度。
2)有序性:各数据元素在线性表中的位置只取决于它们的序与,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个“的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素直接前趋和后面均只有一个数据元素(直接后继)。
在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。链式存储结构将在本网站线性链表中介绍,本章主要介绍用数组实现线性表数据元素的顺序存储及其应用。另外栈.队列和串也是线性表的特殊情况,又称为受限的线性结构。
3.2 线性表的常见操作包括:
①确定表的长度n,即求表中数据元素的个数;
②读表:从左到右(或从右到左)读表,即按a1,a2,……,an(或an,an-1 ,……,
a1 )读取数据元素的值;
③ 检索:即在表中查找具有某个特征值的数据元素;
④ 改写:修改、存入表中第i 个数据元素(1≤i ≤n ),即给第i 个数据元素赋值;
⑤ 插入:在第i-1个和第i 个数据元素之间(1≤i ≤n )插入一个新的数据元素,使原来的第i ,i+1,……,n 个数据元素变成为第i+1,i+2,……,n ,n+1个数据元素;
⑥ 删除:删除第i 个数据元素(1≤i ≤n ),使原来的第i+1,i+2,……,n 个数据元素变成为第i ,i+1,……,n-1个数据元素;
⑦ 排序:即按某个特征值递增(或递减)的顺序对表中的数据元素重新排列。 ⑧ 归并:将两个以上的有序线性表合并成一个新表。 3.3 程序流程图
四.设计方案
系统提供的功能有:线性表的初始化操作,插入元素,删除元素,显示所有元素,排序和查找第i 个元素。用户可根据显示菜单来进行相关操作。
程序流程图
查找数据
创建线性表
删除数据
排序
插入数据
遍历
4.1.插入一个元素:
例如在第i个元素之前插入一个元素,首先要将尾元素到第i个元素向后移动一位,再将新元素传送到第i个位置,即可。
4.2.删除一个元素:
例如删除第i个元素时,要将第i+1个元素到最后一个元素向前移到一位。尾数置零。
五.详细设计
#include"stdio.h"
main()
{
int a[10],de=0,i=0,data=0,locate=0,t=0,j=0;
printf("请依次输入10个输入数据:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
for(;;)
{
printf("\n");
printf(" 0,遍历输出\n");
printf(" 1,删除\n");
printf(" 2,插入\n");
printf(" 3,排序\n");
printf(" 4,查找\n");
printf(" 5,退出\n");
scanf("%d",&j);
if(j==1)
{
printf("请输入删除数据的位置:");
for(;;)
{
scanf("%d",&de);
if(de>=0&&de<10)
break;
else
printf("超出范围请重新输入:");
}
for(i=de;i<9;i++)
a[i]=a[i+1];
a[9]=0;
}
if(j==2)
{
printf("请输入插入的数据:");
scanf("%d",&data);
printf("请输入插入数据的位置:");
for(;;)
{
scanf("%d",&locate);
if(locate>=0&&locate<10)
break;
else
printf("超出范围请重新输入:");
}
for(i=8;i>=locate;i--)
a[i+1]=a[i];
a[locate]=data;
}
if(j==3)
{
printf("对数据进行升序排列");
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
if(j==4)
{
printf("请输入查找数据的位置:");
for(;;)
{
scanf("%d",&locate);
if(locate>=0&&locate<10)
break;
else