如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
/NUMPAGES35
实验一线性表的基本操作
一、实验目的与基本要求
1.掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以与它们之间的关系。
了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
掌握顺序表和链表的基本操作:插入、删除、查找以与表的合并等运算。
掌握运用C语言上机调试线性表的基本方法。
二、实验条件
硬件:一台微机
软件:操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试实现线性表的基本运算。
四、实验容
建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
假设有两个按数据元素值非递减有序排列的线性表A和B,均以顺序表作为存储结构。编写算法将A表和B表归并成一个按元素值非递增有序(允许值一样)排列的线性表C。(可以利用将B中元素插入A中,或新建C表)
假设有两个按数据元素值非递减有序排列的线性表A和B,均以单链表作为存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值一样)排列的线性表C。
五、附源程序与算法程序流程图
1.源程序
(1)源程序(实验要求1和3)
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstructarr
{
int*elem;
intlength;
intlistsize;
}Sqlist;
voidmenu();//菜单
voidInitList(Sqlist*p); //创建线性表
voidShowList(Sqlist*p); //输出顺序线性表
voidListDelete(Sqlist*p,inti,int&e); //在顺序线性表中删除第i个元素,并用e返回其值
voidListInsert(Sqlist*p); //在顺序线性表中第i个元素前插入新元素e
voidListEmpty(Sqlist*p); //判断L是否为空表
voidGetList(Sqlist*p,inti,int&e); //用e返回L中第i个数据元素的值
voidListInsert(Sqlist*p,inti,inte);
boolcompare(inta,intb);
voidLocateElem(Sqlist*L,inte); //在顺序线性表L中查找第1个值与e满足compare()d元素的位序
voidMergeList_L(Sqlist*La,Sqlist*Lb);//归并
voidmain()
{
SqlistLa;
SqlistLb;
intn,m,x;
menu();
scanf("%d",&n);
while(n)
{
switch(n)
{
case0:;break;
case1:
InitList(&La);break;
case2:
ListEmpty(&La);break;
case3:
printf("请输入插入的位序:\n");
scanf("%d",&m);
printf("请出入要插入的数:\n");
scanf("%d",&x);
ListInsert(&La,m,x);break;
case4:
printf("请输入删除元素的位序:\n");
scanf("%d",&m);
ListDelete(&La,m,x);
printf("删除的元素为:%d\n",x);break;
case5:
printf("请输入要找的与线性表中相等的数:\n");
scanf("%d",&m);
LocateElem(&La,m);break;
case6:
printf("请输入查找的位序:\n");
scanf("%d",&m);
GetList(&La,m,x);
printf("La中第%d个元素的值为%d\n",m,x);break;
case7:
ShowList(&La);break;
case8:
InitList(&Lb);break;
case9:
MergeList_L(&La,&
17****21
实名认证
内容提供者
最近下载