实验二顺序表及链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常熟理工学院
《数据结构与算法》实验指导与报告书
__2017_学年第__1__ 学期
专业:物联网工程___________________________ __ 学号:__________________________ ____
姓名:________________________________ __
实验名称:顺序表与链表_______________________________ 实验地点:N6-210_____________________________ ____ 指导教师:聂盼红__________________________ ___
计算机科学与工程学院
2017
实验二顺序表与链表
【实验目的】
1、掌握线性表中元素的前驱、后续的概念。
2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。
3、对线性表相应算法的时间复杂度进行分析。
4、理解顺序表、链表数据结构的特点(优缺点)。
【实验学时】
4学时
【实验预习】
回答以下问题:
1、顺序表的存储表示
在顺序表中,任一数据元素的存放位置是从起始位置开始、与该数据元素的位序成正比的对应存储位置,借助LOC(ai)=LOC(a1)+(i-1)*1确定,则顺序表是一种随机存取的存储结构。
2、单链表的存储表示
线性链表也称单链表,在每一个结点中只包含一个指针,用于指示该结点的直接后继结点,整个链表通过指针相连,最后一个结点因为没有后继结点,其指针置为空(NULL)。这样,链表中所有数据元素(结点)构成一对一的逻辑关系,实现线性表的链式存储。
【实验容和要求】
1、按照要求完成程序exp2_1.c,实现顺序表的相关操作。以下函数均具有返回值,若操作完成,返回OK,操作失败返回ERROR。函数需返回的其他数据,使用函数参数返回。exp2_1.c部分代码如下:
#include
#include
#define ERROR 0
#define MAXSIZE 100
#define OK 1
typedef int ElemType; /*定义表元素的类型*/
typedef struct slist{
ElemType *list;
int listsize;
int length;
}Sqlist;
Sqlist *L;
/*(1)---补充顺序表的存储分配表示,采用定长和可变长度存储均可*/ /*函数声明*/
int InitList_sq(Sqlist *L);
int CreateList_sq(Sqlist *L);
int ListInsert_sq(Sqlist *L,int i,ElemType e);
int PrintList_sq(Sqlist *L);
int ListDelete_sq(Sqlist *L,int i,ElemType *e);
int ListLocate(Sqlist *L,ElemType e,int *pos);
int menu_select();
/*(2)---顺序表的初始化*/
int InitList_sq(Sqlist *L)
{
L->list=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(L->list==NULL)
return ERROR;
else
{
L->length=0;
L->listsize=MAXSIZE;
}
return 0;
}/*InitList*/
/*(3)---创建具有n个元素的顺序表*/
int CreateList_sq(Sqlist *L)
{
int a,b,c;
printf("请输入输入数据的个数n:");
scanf("%d",&a);
printf("请输入输入的数据:");