单链表的基本运算Word文档格式.docx
- 文档编号:21829254
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:26.85KB
单链表的基本运算Word文档格式.docx
《单链表的基本运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《单链表的基本运算Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
(2)不能因实验结果与预期的结果或理论不符而随意取舍甚至修改实验原始数据和伪造实验结果。
如果实验失败,应找出原因及今后应注意的事项。
4.任课老师可结合学科和专业课程特点,对实验报告内容作科学合理的调整。
5.学生在课程结束后将本门课程所有实验报告装订成册,任课教师负责收齐交实验室存档
实验一(实验项目序号)
数据结构教程课程实验报告实验地点:
2-504
实验
名称
指导教师
实验时间
2014-4-17
姓名
学号
成绩
一、实验、训练目的
1.了解单链表基本运算的实现;
2.进一步掌握链表使用的步骤;
3.牢固掌握建立单链表算法,特别是尾插法建表算法,是很多其他复杂复杂的基础;
二、实验预习(含实验原理及设计过程等)
单链表的基本运算,包括:
插入结点运算,删除结点运算,建立单链表,线形表基本运算实现
设计过程:
编写一个程序algo2-2.cpp实现单链表的各种与运算,在此基础上设计一个主程序exp2-2.cpp完成功能。
三、实验、训练内容
编写一个程序algo2-2.cpp.实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:
1.初始化顺序表h;
2.依次采用尾插法插入a,b,c,d,e元素;
3.输出单链表h;
4.输出单链表h长度;
5.判断单链表h是否为空;
6.输出单链表h的第3个元素;
7.输出元素’a’的位置;
8.在第4个元素位置上插入“f”元素;
9.输出单链表h;
10.删除单链表h的第3个元素;
11.输出单链表h;
12.释放单链表h。
四、实验、训练过程(含实验步骤、测试数据、实验结果等)
启动visualc++6.0,建立一个工作区名为proj2-2files,建立一个工作空间名为sourcefiles,建立一个文件名为algo2-2.cpp编写程序,在此基础上建立一个主程序exp2-2.cpp。
5、数据分析、实验结论与讨论
源代码
#include<
stdio.h>
#include<
malloc.h>
#defineboolint
#defineTRUE1
#defineFALSE0//后面有分号
typedefcharElemType;
//后面有分号
//*****LinkList类型定义*****//
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}LinkList,*PLinkList;
//*****基本运算*****//
/*
(1)初始化线性表InitList(L)
**
**分配内存创建头节点,指针域设为空
*/
/*voidInitList(LinkList*L)
L=(LinkList*)malloc(sizeof(LinkList));
L->
next=NULL;
}*/
voidInitList(LinkList**L)//初始化线性表
(*L)=(LinkList*)malloc(sizeof(LinkList));
//创建头结点
(*L)->
}
/*
(2)销毁线性表DestroyList(L)
**释放单链表L占用的空间,即逐一释放全部节点的空间
voidDestroyList(LinkList*L)
LinkList*pre=L,*p=L->
next;
//pre指向*p的前驱节点
while(p!
=NULL)
{
free(pre);
pre=p;
p=pre->
}
free(pre);
/*(3)判断线性表是否为空表ListEmpty(L)
**布尔型,即判断头节点的指针域时候为空
boolListEmpty(LinkList*L)
return(L->
next==NULL);
/*(4)求线性表的长度ListLength(L)
**int型,遍历并累加计算
intListLength(LinkList*L)
intlength=0;
LinkList*p=L;
//p指向头节点,count=0(头节点的序号为)
while(p->
next!
length++;
p=p->
return(length);
/*(5)输出线性表DispList(L)
**逐一扫描,输出数据域
voidDispList(LinkList*L)//输出线性表
LinkList*p=L->
while(p!
printf("
%c"
p->
data);
printf("
\n"
);
/*(6)求线性表中某个数据元素的值GetElem(L,i,e)
**bool型,第i个节点,其值赋给e
boolGetElem(LinkList*L,inti,ElemType*e)
intj=0;
while(j<
i&
&
p!
=NULL)//用j来遍历,当j=i时,数据域的值,即为所求
{//p!
=NULL用来判断是否为空表求值或i超过链表长度
j++;
if(p==NULL)
returnFALSE;
else
"
(*e)=p->
data;
returnTRUE;
/*(7)按元素值查找LocateList(L,e)
**int型,第个值域与e相等的节点,找到返回逻辑序号(1,2,3...),否则返回
intLocateList(LinkList*L,ElemTypee)
inti=1;
=NULL&
p->
data!
=e)//先判断是否已经到链表末尾
i++;
return(0);
return(i);
/*(8)插入数据元素ListInsert(L,i,e)
**bool型,在第i-1个节点后面插入数据域为e的节点,使其成为第i个节点
**P.S.在单链表中,插入一个节点必须先找到插入改节点的前驱节点
boolListInsert(LinkList*L,inti,ElemTypee)
LinkList*p,*s;
//printf("
666\n"
//L=(LinkList*)malloc(sizeof(LinkList));
//L->
p=L;
i-1&
s=(LinkList*)malloc(sizeof(LinkList));
s->
data=e;
next=p->
//到这里错了
p->
next=s;
/*(9)删除数据元素ListDelete(L,i,e)
**bool型,.............................
boolListDelete(LinkList*L,inti,ElemTypee)
LinkList*p=L,*q;
q=p->
if(q==NULL)
{
returnFALSE;
}
e=q->
next=q->
free(q);
}LinkList;
//*****函数声明*****//
//externvoidInitList(LinkList*L);
//externvoidDestroyList(LinkList*L);
//externboolListEmpty(LinkList*L);
//externintListLength(LinkList*L);
//externvoidDIspList(LinkList*L);
//externboolGetElem(LinkList*L,ElemTypei,ElemType*e);
//externintLocateList(LinkList*L,ElemTypee);
//externboolListInsert(LinkList*L,inti,ElemTypee);
//externboolListDelete(LinkList*L,inti,ElemTypee);
voidmain()
inti1,i2,i3,i4,i5;
LinkList*h;
ElemTypee;
单链表的基本运算如下:
(1)初始化单链表h\n"
InitList(&
h);
%s"
h->
next);
(2)依次采用尾插法插入a,b,c,d,e元素\n"
/*
i1=ListInsert(h,1,'
a'
%d\n"
i1);
%c\n"
//无法用指针p检验第一个节点的数据域,因为执行完i1语句后,p已经指向下一个节点了
i2=ListInsert(h,2,'
b'
i3=ListInsert(h,3,'
c'
i4=ListInsert(h,4,'
d'
i5=ListInsert(h,5,'
e'
%d%d%d%d%d"
i1,i2,i3,i4,i5);
*/
ListInsert(h,1,'
ListInsert(h,2,'
ListInsert(h,3,'
ListInsert(h,4,'
ListInsert(h,5,'
(3)输出单链表h:
DispList(h);
(4)单链表h的长度=%d\n"
ListLength(h));
(5)单链表h为%s\n"
ListEmpty(h)?
空"
:
非空"
GetElem(h,5,&
e);
(6)单链表h的第个元素=%c\n"
e);
(7)元素a的位置=%d\n"
LocateList(h,'
));
(8)在第的元素位置上插入f元素\n"
f'
(9)输出单链表h:
(10)删除h的第个元素\n"
ListDelete(h,3,e);
(11)输出单链表h:
(12)释放单链表h\n"
DestroyList(h);
执行结果:
六、心得体会
通过此次实验,让我懂得了单链表的基本运算,它包括插入结点运算,删除结点运算,建立单链表,线形表基本运算,也知道了尾插法的基本方法。
七、教师评语
教师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 基本 运算