实验二 顺序表与链表

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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("请输入输入的数据:");

for(b=0;b

{

scanf("%d",&c);

L->list[b]=c;

}

L->length=L->length+a;

return 0;

}/*CreateList*/

/*(4)---输出顺序表中的元素*/

int PrintList_sq(Sqlist *L)

int a;

printf("输出数据:");

for(a=0;alength;a++)

printf("%d ",L->list[a]);

return 0;

}/*PrintList*/

/*(5)---在顺序表的第i个位置之前插入新元素e*/

int ListInsert_sq(Sqlist *L,int i,ElemType e)

{

int a=L->length-1;

for(;a>=i-1;a--)

L->list[a+1]=L->list[a];

L->list[i-1]=e;

L->length+=1;

return OK;

}/*ListInsert*/

/*(6)---在顺序表中删除第i个元素,e返回删除的元素*/

int ListDelete_sq(Sqlist *L,int i,ElemType *e)

{

int a=i-1;

*e=L->list[i-1];

for(;alength;a++)

L->list[a]=L->list[a+1];

L->length-=1;

return OK;

}/* ListDelete_sq */

/*(7)---在顺序表中查找指定值元素,pos为返回其位置序号*/ int ListLocate(Sqlist *L,ElemType e,int *pos)

{

int a,b=0;

for(a=0;alength;a++)

{

if(e==L->list[a])

{

b=0;

*pos=a+1;

break;

}

else

b=1;

}

相关文档
最新文档