北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx

上传人:b****6 文档编号:13390492 上传时间:2023-06-13 格式:DOCX 页数:15 大小:72.13KB
下载 相关 举报
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第1页
第1页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第2页
第2页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第3页
第3页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第4页
第4页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第5页
第5页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第6页
第6页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第7页
第7页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第8页
第8页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第9页
第9页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第10页
第10页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第11页
第11页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第12页
第12页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第13页
第13页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第14页
第14页 / 共15页
北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx

《北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx》由会员分享,可在线阅读,更多相关《北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx(15页珍藏版)》请在冰点文库上搜索。

北京信息科技大学 数据结构实验一顺序表和单链表的操作.docx

北京信息科技大学数据结构实验一顺序表和单链表的操作

实验报告

 

课程名称数据结构

实验项目顺序表和单链表的操作

实验仪器计算机

 

系别计算机学院学院

专业

班级/学号

学生姓名

实验日期

成绩

指导教师

一 、实验目的

(1)熟悉顺序表的操作方法。

(2)熟悉单链表的操作方法。

(3)了解这两者间的区别和各自的优缺点。

二、 实验内容

(1)用顺序表实现数据的增、删、查功能

(2)用单链表实现数据的增、删、查、改等功能

三、实验课时

4课时

四、实验步骤

1.仔细分析并理解数据结构这本书上提供的部分程序伪代码

2.根据所给的代码编写出主函数和一些需要用到的函数

3.将伪代码翻译为程序能用的代码

4.充分理解每段代码的含义以及它所起到的作用

5.编译调试,纠正错误并分析出错的原因

6.运行并测试

五、程序源代码

1.顺序表:

#include

#include

#include

#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间的分配增量

#defineOK1

#defineOVERFLOW-2

#defineERROR0

typedefintElemType;

typedefintStatus;

typedefstruct//用户自定义结构体SqList

{

ElemType*elem;//指针指向存储空间基址

intlength;

intlistsize;

}SqList;

StatusPut(SqList&L,intn)

{

printf("向线性表中输入这n个数据:

");

for(inti=0;i

scanf("%d",&L.elem[i]);

L.length=L.length+n;

returnOK;

}

StatusOut(SqList&L,intn)

{

printf("该线性表为:

");

for(inti=0;i

printf("%d",L.elem[i]);

returnOK;

}

StatusInitlist_Sq(SqList&L)

{

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

L.elem)exit(OVERFLOW);

L.length=0;//空表长度为0

L.listsize=LIST_INIT_SIZE;//初始存储容量

returnOK;

}

int*p,*q,*e;

StatusListInsert_Sq(SqList&L,inti,ElemTypee)

{

ElemType*newbase;

printf("请输入要插入的位置:

");

scanf("%d",&i);

printf("请输入要插入的数据:

");

scanf("%d",&e);

if(i<1||i>L.length+1)returnERROR;//i的值不合法

if(L.length>=L.listsize)

{//存储空间已满,增加分配

newbase=(ElemType*)realloc(L.elem,

(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!

newbase)exit(OVERFLOW);//重新分配失败

L.elem=newbase;

L.listsize+=LISTINCREMENT;//增加分配容量

}

q=&(L.elem[i-1]);//q为插入地址

for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;//插入元素后移

*q=e;

++L.length;

Out(L,L.length);

returnOK;

}

StatusListDelete_Sq(SqList&L,inti,ElemType&e)

{

printf("请输入要删除的位置:

");

scanf("%d",&i);

printf("请输入要删除的数据:

");

scanf("%d",&e);

if((i<1)||(i>=L.length))returnERROR;

p=&(L.elem[i-1]);

e=*p;

q=L.elem+L.length-1;

for(++p;p<=q;++p)*(p-1)=*p;

--L.length;

Out(L,L.length);

returnOK;

}

intLocateElem_Sq(SqListL,ElemTypef)

{

inti=1;

p=L.elem;

printf("请输入要查找的元素:

");

scanf("%d",&f);

while((i<=L.length)&&!

((*p++)==f))i++;

if(i<=L.length)

printf("该元素在表中位置为%d",i);

else

printf("该元素不在表中");

returnOK;

}

 

intmain()

{

intn=0,b=0,i=0,e=0,f=0;

SqListL;

Initlist_Sq(L);

printf("请指定该顺序表有n个元素个数:

");

scanf("%d",&n);

Put(L,n);

Out(L,n);

do

{

printf("\n请输入以下指令来进行操作:

1.插入2.删除3.查找\n");

scanf("%d",&b);

switch(b)

{

case1:

ListInsert_Sq(L,i,e);break;

case2:

ListDelete_Sq(L,i,e);break;

case3:

LocateElem_Sq(L,f);break;

default:

printf("输入指令有误!

");break;

}

}

while(b!

=0);

return0;

}

 

2.单链表:

#include

usingnamespacestd;

#definetrue1

#definefalse0

#defineok1

#defineerror0

#defineoverflow-1

typedefintStatus;

typedefintElemType;

typedefstructLNode

{ElemTypedata;

structLNode*next;

}LNode,*LinkList;

voidshow(LinkListL)

{LinkListp;

p=L->next;

while(p)

{printf("%d",p->data);

p=p->next;}

printf("\n");}

intLength(LinkListL,inti)

{i=0;

LinkListp=L->next;

while(p)

{++i;

p=p->next;}

returni;

}

voidchange(LinkListL)

{inti,j=1;

ElemTypek;

ElemTypee,m;

LinkListp=L->next;

printf("请输入要修改的元素位置:

\n");

scanf("%d",&i);

GetElem(L,i,e);

printf("该位置的元素:

%d\n",e);

printf("修改后的元素值:

\n");

scanf("%d",&k);

while(p&&j

{p=p->next;

++j;}

m=p->data;

p->data=k;

printf("修改后的单链表显示如下:

\n");

show(L);

}

voidCreateList(LinkList&L,intn)

{LinkListp;

L=newLNode;

L->next=NULL;

LinkListq=L;

for(inti=1;i<=n;i++)

{p=newLNode;

scanf("%d",&p->data);

p->next=NULL;

q->next=p;

q=p;}

}

StatusGetElem(LinkListL,inti,ElemType&e)

{LinkListp=L->next;

intj=1;

while(p&&j

{p=p->next;

++j;}

if(!

p||j>i)returnerror;

e=p->data;

returnok;

}

StatusLinkInsert(LinkList&L,inti,ElemTypee)

{LinkListp=L;

intj=0;

while(p&&j

{p=p->next;

++j;}

if(!

p||j>i-1)

returnerror;

LinkLists=newLNode;

s->data=e;

s->next=p->next;

p->next=s;

returnok;}

StatusListDelete(LinkList&L,inti,ElemType&e)

{LinkListp=L;

LinkListq;

intj=0;

while(p->next&&j

{

p=p->next;

++j;}

if(!

(p->next)||j>i-1)returnerror;

q=p->next;

p->next=q->next;

e=q->data;

free(q);

returnok;

}

 

voidmain()

{ints;

inta;

ElemTypey;

LinkListlist;

for(;;)

{printf("单链表操作\n");

printf("1.创建\n");

printf("2.显示\n");

printf("3.表的长度\n");

printf("4.查找\n");

printf("5.修改\n");

printf("6.插入\n");

printf("7.删除\n");

printf("8.结束\n");

printf("请选择:

");

scanf("%d",&s);

switch(s)

{case1:

printf("请输入单链表的长度:

\n");

scanf("%d",&a);

printf("请输入%d个元素\n",a);

CreateList(list,a);

break;

case2:

printf("该单链表为:

\n");

show(list);

break;

case3:

//ints;

printf("单链表的长度为:

%d\n",Length(list,s));

break;

case4:

printf("请选择所要取出元素的位置:

\n");

scanf("%d",&x);

while(a<0||a>Length(list,s))

{printf("输入有误,请重新输入\n");

printf("请选择所要取出元素的位置:

\n");

scanf("%d",&a);

}

GetElem(list,a,y);

printf("该位置的元素为%d:

\n",y);

break;

case5:

change(list);break;

case6:

printf("请选择要插入的位置:

");

scanf("%d",&a);

while(a<0||a>Length(list,s))

{printf("输入有误,请重新输入");

printf("请选择所要插入元素的位置:

");

scanf("%d",&a);

}

printf("要插入的元素值:

");

scanf("%d",&y);

LinkInsert(list,a,y);

printf("插入后的单链表:

\n");

show(list);

break;

case7:

printf("请选择要删除的元素位置(0

",Length(list,s));

scanf("%d",&a);

while(a<0||a>Length(list,s))

{printf("输入有误,请重新输入");

printf("请选择所要删除元素的位置(0

",Length(list,s));

scanf("%d",&a);

}

ListDelete(list,a,y);

printf("要删除的元素值:

%d",y);

printf("删除后的单链表:

\n");

show(list);

break;

case8:

exit(0);

break;

default:

printf("输入有误,请重新输入");

break;

}

}

}

六、实验截图

(1)顺序表:

a)创建新链表:

b)插入数据:

3.删除数据:

4.查找数据:

(2)单链表:

初始化:

1.创建单链表:

2.显示单链表:

3.表长:

4.查找:

5.修改:

6.插入:

7.删除:

七、实验心得

1.通过这次实验让我充分了解了以前虽然学过但其实还不是很理解的顺序表和单链表的一些具体操作和原理。

 

2.在实际操作中,会出现很多问题,从这些问题中会反映出一大堆自己本身所存在的不足,让我认识到自己在编程中会经常出现的错误,下定决心在以后中不犯这种在别人看来是低级的错误

3.要学会经常拿别人的程序进行比较,看看谁的相对较好一些,学习一些别人程序中的亮点以及反思自己为什么没有做到

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2