数据结构实验报告实现单链表各种基本运算的算法.docx

上传人:b****8 文档编号:28513566 上传时间:2023-07-18 格式:DOCX 页数:12 大小:231.34KB
下载 相关 举报
数据结构实验报告实现单链表各种基本运算的算法.docx_第1页
第1页 / 共12页
数据结构实验报告实现单链表各种基本运算的算法.docx_第2页
第2页 / 共12页
数据结构实验报告实现单链表各种基本运算的算法.docx_第3页
第3页 / 共12页
数据结构实验报告实现单链表各种基本运算的算法.docx_第4页
第4页 / 共12页
数据结构实验报告实现单链表各种基本运算的算法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构实验报告实现单链表各种基本运算的算法.docx

《数据结构实验报告实现单链表各种基本运算的算法.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实现单链表各种基本运算的算法.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构实验报告实现单链表各种基本运算的算法.docx

数据结构实验报告实现单链表各种基本运算的算法

实验题目

实现单链表各种基本运算的算法

小组合作

姓名

班级

学号

一、实验目的

领会单链表存储结构和掌握单链表中各种基本运算算法设计

二.实验环境

MiscroftVisualC++6.0环境。

三.实验内容与步骤

1.编写linklist.cpp程序包含有关单链表运算算法

2.编写exp2-2.cpp程序包含有关程序代码

3.运行程序exp2-2.cpp,得到结果

四、实验过程与分析

//单链表运算算法

#include

#include

typedefcharElemType;

typedefstructLNodea

{

ElemTypedata;

structLNode*next;

//指向后继结点

}LinkNode;

//单链表结点类型

voidCreateListF(LinkNode*&L,ElemTypea[],intn)

//头插法建立单链表

{

LinkNode*s;

L=(LinkNode*)malloc(sizeof(LinkNode));

//创建头结点

L->next=NULL;

for(inti=0;i

{

s=(LinkNode*)malloc(sizeof(LinkNode));

//创建新结点s

s->data=a[i];

s->next=L->next;

//将结点s插在原开始结点之前,头结点之后

L->next=s;

}

}

voidCreateListR(LinkNode*&L,ElemTypea[],intn)

//尾插法建立单链表

{

LinkNode*s,*r;

L=(LinkNode*)malloc(sizeof(LinkNode));

//创建头结点

L->next=NULL;

r=L;

//r始终指向尾结点,开始时指向头结点

for(inti=0;i

{

s=(LinkNode*)malloc(sizeof(LinkNode));

//创建新结点s

s->data=a[i];

r->next=s;

//将结点s插入r结点之后

r=s;

}

r->next=NULL;

//尾结点next域置为NULL

}

实验截图

(1)

voidInitList(LinkNode*&L)

//初始化线性表

{

L=(LinkNode*)malloc(sizeof(LinkNode));

//创建头结点

L->next=NULL;

//单链表置为空表

}

voidDestroyList(LinkNode*&L)

//销毁线性表

{

LinkNode*pre=L,*p=pre->next;

while(p!

=NULL)

{free(pre);

pre=p;

//pre、p同步后移一个结点

p=pre->next;

}

free(pre);

//此时p为NULL,pre指向尾结点,释放它

}

boolListEmpty(LinkNode*L)

//判线性表是否为空表

{

return(L->next==NULL);

}

intListLength(LinkNode*L)

//求线性表的长度

{inti=0;

LinkNode*p=L;

//p指向头结点,n置为0(即头结点的序号为0)

while(p->next!

=NULL)

{i++;

p=p->next;

}

return(i);

//循环结束,p指向尾结点,其序号i为结点个数

}

voidDispList(LinkNode*L)

//输出线性表

{LinkNode*p=L->next;//p指向首结点

while(p!

=NULL)//p不为NULL,输出p结点的data域

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

p=p->next;//p移向下一个结点

}

printf("\n");

}

实验截图

(2)

boolGetElem(LinkNode*L,inti,ElemType&e)

//求线性表中第i个元素值

{intj=0;

if(i<=0)returnfalse;

//i错误返回假

LinkNode*p=L;

//p指向头结点,j置为0(即头结点的序号为0)

while(j

=NULL)

//找第i个结点p

{j++;

p=p->next;

}

if(p==NULL)

//不存在第i个数据结点,返回false

returnfalse;

else

//存在第i个数据结点,返回true

{e=p->data;

returntrue;

}

}

intLocateElem(LinkNode*L,ElemTypee)

//查找第一个值域为e的元素序号

{inti=1;

LinkNode*p=L->next;

//p指向首结点,i置为1(即首结点的序号为1)

while(p!

=NULL&&p->data!

=e)

//查找data值为e的结点,其序号为i

{p=p->next;

i++;

}

if(p==NULL)

//不存在值为e的结点,返回0

return(0);

else

//存在值为e的结点,返回其逻辑序号i

return(i);

}

实验截图(3)

boolListInsert(LinkNode*&L,inti,ElemTypee)

//插入第i个元素

{intj=0;

if(i<=0)returnfalse;

//i错误返回假

LinkNode*p=L,*s;

//p指向头结点,j置为0(即头结点的序号为0)

while(j

=NULL)

//查找第i-1个结点p

{j++;

p=p->next;

}

if(p==NULL)

//未找到第i-1个结点,返回false

returnfalse;

else

//找到第i-1个结点p,插入新结点并返回true

{s=(LinkNode*)malloc(sizeof(LinkNode));

s->data=e;

//创建新结点s,其data域置为e

s->next=p->next;

//将结点s插入到结点p之后

p->next=s;

returntrue;

}

}

boolListDelete(LinkNode*&L,inti,ElemType&e)

//删除第i个元素

{intj=0;

if(i<=0)returnfalse;

//i错误返回假

LinkNode*p=L,*q;

//p指向头结点,j置为0(即头结点的序号为0)

while(j

=NULL)

//查找第i-1个结点

{j++;

p=p->next;

}

if(p==NULL)

//未找到第i-1个结点,返回false

returnfalse;

else

//找到第i-1个结点p

{q=p->next;

//q指向第i个结点

if(q==NULL)

//若不存在第i个结点,返回false

returnfalse;

e=q->data;

p->next=q->next;

//从单链表中删除q结点

free(q);

//释放q结点

returntrue;

//返回true表示成功删除第i个结点

}

}

实验截图(4)

编写exp2-2.cpp程序包含有关代码

//文件名:

exp2-2.cpp

#include"linklist.cpp"

intmain()

{

LinkNode*h;

ElemTypee;

printf("单链表的基本运算如下:

\n");

printf("

(1)初始化单链表h\n");

InitList(h);

printf("

(2)依次采用尾插法插入a,b,c,d,e元素\n");

ListInsert(h,1,'a');

ListInsert(h,2,'b');

ListInsert(h,3,'c');

ListInsert(h,4,'d');

ListInsert(h,5,'e');

printf("(3)输出单链表h:

");

DispList(h);

printf("(4)单链表h长度:

%d\n",ListLength(h));

printf("(5)单链表h为%s\n",(ListEmpty(h)?

"空":

"非空"));

GetElem(h,3,e);

printf("(6)单链表h的第3个元素:

%c\n",e);

printf("(7)元素a的位置:

%d\n",LocateElem(h,'a'));

printf("(8)在第4个元素位置上插入f元素\n");

ListInsert(h,4,'f');

printf("(9)输出单链表h:

");

DispList(h);

printf("(10)删除h的第3个元素\n");

ListDelete(h,3,e);

printf("(11)输出单链表h:

");

DispList(h);

printf("(12)释放单链表h\n");

DestroyList(h);

return1;

}

实验截图(5)

运行得到结果

实验截图(6)

五.实验总结

通过这次实验,我的收获如下:

1.进行编程时,要在感到模糊的地方进行备注,方便在报错的时候进行修改。

2.要保持linklist.cpp程序中的函数名与exp2-2.cpp程序中的函数名完全一致,特别是大小写部分要特别注意。

3.领会到了单链表存储的大体结构

4.了解了在单链表中各种基本运算算法设计

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

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1