数据结构_实验二_线性表及其实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验编号:2四川师大《数据结构》实验报告2016年9月30日
实验二线性表及其实现_
一.实验目的及要求
(1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现,以线性表的各种操作(建立、插入、删除等)的实现为实验重点。
(2)通过本次实验帮助学生加深对顺序表、链表的理解,并加以应用。
(3)掌握循环链表和双链表的定义和构造方法。
二.实验内容
(1)编程实现线性表两种存储结构(顺序存储、链式存储)中的基本操作的实现(线性表的创建、插入、删除、查找(顺序查找、折半查找)、排序等),并设计一
个菜单调用线性表的基本操作。
(2)建立一个按元素递增有序的单链表L,并编写程序实现:
a)将x插入其中后仍保持L的有序性;
b)将数据值介于min和max之间的结点删除,并保持L的有序性;
c)将单链表L逆置并输出;
(3)编程实现将两个按元素递增有序的单链表合并为一个新的按元素递增的单链表。
注:(1)为必做题,(2)~(3)选做。
三.主要仪器设备及软件
(1)PC机
(2)Dev C++ ,Visual C++, VS2010等
四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现线性表两种存储结构(顺序存储、链式存储)中的基本操作的实现(线性表的创建、插入、删除、查找(顺序查找、折半查找)、排序等),并设计一
个菜单调用线性表的基本操作。
A.顺序储存:
➢代码部分:
Main.cpp:
#include"Sqlist.h"
int main()
{
Sqlist L;
int e = 0, number=0,locat =0,elect=0;
int ret;//存放返回值
printf("请先创建一个含有10个整型元素的顺序表!\n");
Initlist_Sq(L);
do {
elect=Print_Sq(L);
switch (elect)
{
case 0:
break;
case 1://插入
printf("请输入你想添加的位置和数字(用空格隔开):");
scanf_s("%d%d",&number,&locat);
ListInsert_Sq(L, number, locat);
break;
case 2://删除
printf("请输入你想删除数字的位置:");
scanf_s("%d", &locat);
listDelete_Sq(L, locat, e);
printf("the delete number is %d\n", e);
break;
case 3://顺序查找
printf("请输入你想查找的数字:");
scanf_s("%d", &number);
ret=listFine1_Sq(L, locat, number);
if(ret)
{
printf("%d在表中的位置是%d\n", number, locat);
}
break;
case 4://折半查找
printf("请输入你想查找的数字:");
scanf_s("%d", &number);
ret=listFine2_Sq(L, locat, number);
if(ret)
{
printf("%d在表中的位置是%d\n", number, locat);
}
break;
case 5://升序
Ascending_Sq(L);
break;
case 6://降序
Decending_Sq(L);
break;
default:
printf("输入错误!!\n");
}
} while (elect != 0);
system("pause");
return 0;
}Sqlist.cpp:
#include"Sqlist.h"
//输出表格
int Print_Sq(Sqlist &L)
{
int i = 0;
printf("现有线性表:\n");
for (; i < L.length; i++)
{
printf("%5d", L.elem[i]);
}
printf("\n");
i = 0;
printf("***********************************\n");
printf("*************1.插入****************\n");
printf("*************2.删除****************\n");
printf("*************3.顺序查找************\n");
printf("*************4.折半查找************\n");
printf("*************5.排升序**************\n");
printf("*************6.排降序**************\n");
printf("*************0.退出****************\n");
printf("***********************************\n");
printf("请输入你的选择:");
scanf_s("%d", &i);
return i;
}
//创建顺序线性表
Status Initlist_Sq(Sqlist &L)
{
int i, number;
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
for (i = 0; i {