好文档 - 专业文书写作范文服务资料分享网站

大数据结构(邹永林版)实验报告材料2-顺序表与链表

天下 分享 时间: 加入收藏 我要投稿 点赞

实验二 顺序表与链表

【实验目的】

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

\退出*/

\ };

char s[3]; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/

for (i=0;i<7;i++) /*输出主菜单数组*/ printf(\ do {

printf(\在菜单窗口外显示提示信息*/ scanf(\输入选择项*/

c=atoi(s); /*将输入的字符串转化为整形数*/ }

while (c<0||c>4); /*选择项不在0~4之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/ }

/*主函数*/ int main() {

int m,k; int pos;

int deldata; Sqlist sl;

InitList_sq(&sl);

for (;;) /*无限循环*/ {

switch (menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/ {

case 1:

printf(\ CreateList_sq(&sl);

printf(\ PrintList_sq(&sl); break; case 2:

printf(\ printf(\ scanf(\

if (!ListLocate(&sl,k,&pos)) printf(\ else {

printf(\ printf(\ PrintList_sq(&sl); }

4

break; case 3:

printf(\

printf(\ scanf(\

if (ListInsert_sq(&sl,m,k)) {

printf(\

printf(\ PrintList_sq(&sl); } else

printf(\ break; case 4:

printf(\

printf(\ scanf(\

if (ListDelete_sq(&sl,k,&deldata)) {

printf(\

printf(\ printf(\ PrintList_sq(&sl); } else

printf(\ break; case 0:

exit(0); /*如菜单返回值为0程序结束*/ } }

return 0; }

(1)创建一个顺序表

5

大数据结构(邹永林版)实验报告材料2-顺序表与链表

实验二顺序表与链表【实验目的】1、掌握线性表中元素的前驱、后续的概念。2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。3、对线性表相应算法的时间复杂度进行分析。4、理解顺序表、链表数据结构的特点(优缺点)。【实验学时】2学时【实验预习】回答以下问题:
推荐度:
点击下载文档文档为doc格式
0jjpb8adax4yj364q360565jb3urvy01142
领取福利

微信扫码领取福利

微信扫码分享