山东大学数据结构第一次实验实验报告.docx

上传人:b****0 文档编号:9315816 上传时间:2023-05-18 格式:DOCX 页数:12 大小:120.90KB
下载 相关 举报
山东大学数据结构第一次实验实验报告.docx_第1页
第1页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第2页
第2页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第3页
第3页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第4页
第4页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第5页
第5页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第6页
第6页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第7页
第7页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第8页
第8页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第9页
第9页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第10页
第10页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第11页
第11页 / 共12页
山东大学数据结构第一次实验实验报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

山东大学数据结构第一次实验实验报告.docx

《山东大学数据结构第一次实验实验报告.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构第一次实验实验报告.docx(12页珍藏版)》请在冰点文库上搜索。

山东大学数据结构第一次实验实验报告.docx

山东大学数据结构第一次实验实验报告

山东大学数据结构第一次实验实验报告

实验1ADT表的编程与实现

C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。

具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐。

MicrosoftVisualC++是Microsoft公司推出的开发Win32环境程序具有集成开发环境,可提供编辑C语言,C++以及C++/CLI语言等可视化集成编程系统。

它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。

本课程实验要求学生运用C语言编程完成数据结构课程中抽象数据类型及排序算法的编程实现,加深对教学内容的理解。

 

实验目的:

加深对抽象数据类型ADT表的理解;

实验原理:

参照课本p.44-49,及Figure3.6-3.13.

实验内容:

编写程序实现ADT表的定义,及常用操作:

1)判断表是否为空;

2)获取第i个节点的内容

3)删除

4)插入

实验要求:

1)复习C语言相关知识;

2)实现完整的ADT表结构及操作,并给出应用。

实验源程序:

#include"stdafx.h"

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

typedefstructnode

{

intdata;

structnode*pNext;//pNext为指向下一个节点的指针

}Node,*pNode;

pNodeCreateLinkList();//创建链表函数

boolIsEmpty(pNode);//定义IsEmpty(pNode)为布尔值,判断链表是否为空

intFindTheNode(pNodepHead,inta,intlength);//找出某一个节点的值

voidTraverseLinkList(pNodepHead);//遍历链表,获取链表中的数值

intGetLengthLinklist(pNodepHead);//获取链表长度

intDelete(pNodepHead,intx);//删除元素

intInsert(pNodepHead,intb,intc);//插入元素

voidFreeLinkList(pNodepHead);//释放链表空间

////////////////////////////////////////////////////////////////////////////////

intmain()//主函数

{inta,b,c,x,length;

pNodepHead=NULL;//初始化头节点pHead为NULL

pHead=CreateLinkList();//创建一个非循环单链表,并将该链表的头结点的地址赋给pHead

if(IsEmpty(pHead))//判断链表是否为空

{

printf("链表为空!

\n");

return0;

pNew->data=a;

pTail->pNext=pNew;//pTail中的指针pNext指向pNew

pNew->pNext=NULL;

pTail=pNew;//新建的节点变为链尾

}

returnpHead;

}

////////////////////////////////////////////////////////////////////////////////

boolIsEmpty(pNodepHead)//判断列表是否为空

{

returnpHead->pNext==NULL;

}

/////////////////////////////////////////////////////////////////////////////////

intFindTheNode(pNodepHead,inta,intlength)//找出某一个节点的值

{

if(a>length)//判断要查找的节点位置是否正确

{printf("链表中没有此节点\n");

return0;

}

else

{pNodep=pHead->pNext;

for(inti=0;i

{

if(i==a-1)

{

printf("第%d个节点的内容是:

%d",a,p->data);}//当找到该节点时输出它的值

p=p->pNext;

}

printf("\n");

return1;

}}

///////////////////////////////////////////////////////////////////////////

voidTraverseLinkList(pNodepHead)//遍历链表,获取链表中的数值

{

printf("链表中各节点的值依次为:

");

pNodep=pHead->pNext;

while(p!

=NULL)//知道最后一个节点循环才停止

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

p=p->pNext;

}

printf("\n");

}

///////////////////////////////////////////////////////////////////////////////

intGetLengthLinklist(pNodepHead)//获取链表长度

{

intlength=0;

pNodep=pHead->pNext;

while(p!

=NULL)

{length++;

p=p->pNext;

}

returnlength;

}

////////////////////////////////////////////////////////////////////////////////

intDelete(pNodepHead,intx)//删除元素

{

pNodep,q;

q=p=pHead;

p=p->pNext;//p指向头结点后第一个元素

while(p)

{

if(p->data==x)//找到要删除的元素

{

q->pNext=p->pNext;

free(p);//释放该元素所在节点的空间

return1;

}

else

{q=p;//q始终指向p上一个节点

p=p->pNext;

}}

return0;

}

///////////////////////////////////////////////////////////////////////////

intInsert(pNodepHead,intb,intc)//插入元素

{

pNodep,q;

q=p=pHead;

p=p->pNext;

if(b>0&&b

{

for(inti=1;b>i;i++)

{

q=p;//q始终指向p上一个节点

p=p->pNext;

}

pNodepNew=(pNode)malloc(sizeof(Node));//创建新节点并动态分配内存

pNew->data=c;

pNew->pNext=p;

q->pNext=pNew;

return1;

}

elsereturn0;

}

////////////////////////////////////////////////////////////////////////////

voidFreeLinkList(pNodepHead)//释放链表空间

{pNodep,q;

p=pHead->pNext;

while(p!

=NULL)

{q=p->pNext;

free(p);//释放各节点的空间

p=q;}

pHead->pNext=NULL;

}

实验结果:

1)判断表是否为空

①创建链表,链表不为空。

②链表为空。

2)获取第i个节点的内容

①输入要求获取的节点内容的位置正确,比如i=2,则得到第2个节点的内容为22。

②输入要求获取的节点内容的位置不在链表中,比如i=8,则显示链表中没有此节点。

③若输入节点位置不在链表中,则需继续输入正确位置,不然系统会一直要求输入

节点i的值直到我们输入正确的节点位置。

3)删除

①输入要删除的元素在链表中,比如删除元素44,则链表中剩下的元素有11、

22、33、55、66.

②若输入要删除的元素不在链表中,比如要删除元素77,则显示未找到该元素,

删除失败。

③若输入要删除的元素不在链表中,则需继续输入在链表中的元素,不然系统会

一直要求输入要删除的元素。

4)插入

①输入要插入的位置正确,比如插入到位置1中,则在位置1插入元素0后

链表中各节点的数值依次为0、11、22、33、55、66。

②若输入要插入的位置不正确,比如插入到位置8中,则显示未找到该

位置,插入失败。

③若输入要插入的位置不正确,则需继续输入正确的位置,不然系统会

一直要求输入正确的位置和要插入的节点的数值。

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

当前位置:首页 > 职业教育 > 职高对口

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

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