数据结构(邹永林版)实验报告2-顺序表与链表 下载本文

内容发布更新时间 : 2024/11/10 5:25:39星期一 下面是文章的全部内容请认真阅读。

实验二 顺序表与链表

【实验目的】

1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。

【实验学时】

2学时

【实验预习】

回答以下问题:

1、顺序表的存储表示

在顺序表中,任一数据元素的存放位置是从起始位置开始、与该数据元素的位序成正比的对应存储位置,借助LOC(ai)=LOC(a1)+(i-1)*1 确定,则顺序表是一种随机存取的存储结构。 2、单链表的存储表示

线性链表也称单链表,在每一个结点中只包含一个指针,用于指示该结点的直接后继结点,整个链表通过指针相连,最后一个结点因为没有后继结点,其指针置为空(NULL)。这样,链表中所有数据元素(结点)构成一对一的逻辑关系,实现线性表的链式存储。

【实验内容和要求】

1、按照要求完成程序exp2_1.c,实现顺序表的相关操作。以下函数均具有返回值,若操作完成,返回OK,操作失败返回ERROR。函数需返回的其他数据,使用函数参数返回。exp2_1.c部分代码如下:

#include #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);

1

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(\

printf(\请输入输入的数据:\ for(b=0;b

scanf(\ 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(\ \ return 0; }/*PrintList*/

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

2

{

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; }

if(b==1)

return 0; else

return OK; }/* ListLocate */

/*定义菜单字符串数组*/ int menu_select() {

char *menu[]={\ \ /*创建顺序表*/

\ /*查找顺序表中的元素*/ \ /*插入数据*/ \ /*删除数据*/

3