《数据结构》实验指导及报告书
(2014)
/ 学年 第 1 学期
姓 名: 胡汜亮 学 号: 班 级:
指导教师:
1
实验一 顺序表与链表
一、实验目的
1、掌握线性表中元素的前驱、后续的概念。
2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。 3、对线性表相应算法的时间复杂度进行分析。 4、理解顺序表、链表数据结构的特点(优缺点)。
二、实验预习
说明以下概念 1、线性表:
2、顺序表:
3、链表:
三、实验内容和要求
1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。 #include
#define INIT_SIZE 5 /*初始分配的顺序表长度*/ #define INCREM 5 /*溢出时,顺序表长度的增量*/ typedef int ElemType; /*定义表元素的类型*/ typedef struct Sqlist{
ElemType *slist; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }Sqlist;
int InitList_sq(Sqlist *L); /* */ int CreateList_sq(Sqlist *L,int n); /* */
int ListInsert_sq(Sqlist *L,int i,ElemType e);/* */ int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/ int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/ int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/
2
int InitList_sq(Sqlist *L){
L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType)); if(!L->slist) return ERROR; L->length=0; L->listsize=INIT_SIZE; return OK; }/*InitList*/
int CreateList_sq(Sqlist *L,int n){ ElemType e; int i;
for(i=0;i printf(\ scanf(\ if(!ListInsert_sq(L,i+1,e)) return ERROR; } return OK; }/*CreateList*/ /*输出顺序表中的元素*/ int PrintList_sq(Sqlist *L){ int i; for(i=1;i<=L->length;i++) printf(\ return OK; }/*PrintList*/ int ListInsert_sq(Sqlist *L,int i,ElemType e){ int k; if(i<1||i>L->length+1) return ERROR; if(L->length>=L->listsize){ L->slist=(ElemType*)realloc(L->slist, (INIT_SIZE+INCREM)*sizeof(ElemType)); if(!L->slist) return ERROR; L->listsize+=INCREM; } for(k=L->length-1;k>=i-1;k--){ L->slist[k+1]= L->slist[k]; } L->slist[i-1]=e; 3 L->length++; return OK; }/*ListInsert*/ /*在顺序表中删除第i个元素*/ int ListDelete_sq(Sqlist *L,int i){ } /*在顺序表中查找指定值元素,返回其序号*/ int ListLocate(Sqlist *L,ElemType e){ } int main(){ Sqlist sl; int n,m,k; printf(\输入顺序表的元素个数*/ scanf(\ if(n>0){ printf(\ InitList_sq(&sl); CreateList_sq(&sl,n); printf(\ PrintList_sq(&sl); printf(\ scanf(\ ListInsert_sq(&sl,m,k); printf(\ PrintList_sq(&sl); printf(\ } else printf(\ return 0; } ? 运行结果 ? 算法分析 4