实验一 顺序表与链表.doc
文本预览下载声明
实验一 顺序表与链表
一、实验目的
1、掌握线性表中元素的前驱、后续的概念。
2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。
3、对线性表相应算法的时间复杂度进行分析。
4、理解顺序表、链表数据结构的特点(优缺点)。
二、实验预习
说明以下概念
1、线性表:
2、顺序表:
3、链表:
三、实验内容和要求
1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。
#includestdio.h
#includemalloc.h
#define ERROR 0
#define OK 1
#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); /* 构造一个空的线性表L */
int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */
int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */
int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/
int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/
int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/
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;in;i++){
printf(input data %d,i+1);
scanf(%d,e);
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(%5d,L-slist[i-1]);
return OK;
}/*PrintList*/
int ListInsert_sq(Sqlist *L,int i,ElemType e){
int k;
if(i1||iL-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;
L-length++;
return OK;
}/
显示全部