实验二 2Word格式文档下载.docx
- 文档编号:8482111
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:13
- 大小:34.19KB
实验二 2Word格式文档下载.docx
《实验二 2Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验二 2Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。
(6)输出单链表H中的第3个元素;
(9)输出单链表H;
(10)删除H中的第3个元素;
(11)输出单链表H;
(12)释放单链表H。
三、实验要求:
1.C完成算法设计和程序设计并上机调试通过。
2.撰写实验报告,提供实验结果和数据。
3.写出算法设计小结和心得。
三、程序源代码:
实验一
#include<
stdio.h>
malloc.h>
#defineMaxSize50
typedefcharElemType;
typedefstruct
{
ElemTypedata[MaxSize];
intlength;
}SqList;
//初始化
voidInitList(SqList*&
L)
L=(SqList*)malloc(sizeof(SqList));
L->
length=0;
}
//销毁
voidDestroyList(SqList*L)
free(L);
//判断是否为空
intListEmpty(SqList*L)
return(L->
length==0);
//判断长度
intListLength(SqList*L)
{
length);
}
//显示输出
voidDispList(SqList*L)
inti;
if(ListEmpty(L))return;
for(i=0;
i<
L->
length;
i++)
printf("
%c"
L->
data[i]);
printf("
\n"
);
intGetElem(SqList*L,inti,ElemType&
e)
if(i<
1||i>
length)
return0;
e=L->
data[i-1];
return1;
intLocateElem(SqList*L,ElemTypee)
inti=0;
while(i<
length&
&
data[i]!
=e)i++;
if(i>
=L->
else
returni+1;
//尾插法
intListInsert(SqList*&
L,inti,ElemTypee)
intj;
length+1)
i--;
//将顺序表位序转化为elem下标*/
for(j=L->
j>
i;
j--)//将data[i]及后面元素后移一个位置*/
L->
data[j]=L->
data[j-1];
data[i]=e;
length++;
//顺序表长度增1*/
intListDelete(SqList*&
L,inti,ElemType&
data[i];
for(j=i;
j<
length-1;
j++)
data[j+1];
length--;
}
voidmain()
SqList*L;
ElemTypee;
InitList(L);
ListInsert(L,1,'
a'
ListInsert(L,2,'
b'
ListInsert(L,3,'
c'
ListInsert(L,4,'
d'
ListInsert(L,5,'
e'
输出L\n"
//输出L
DispList(L);
判断长度\n"
ListLength(L)=%d\n"
ListLength(L));
//判断为空
判断是否为空\n"
ListEmpty(L)=%d"
ListEmpty(L));
if(ListEmpty(L))
当前为空\n"
else
当前不为空\n"
ListEmpty(L)=%d\n"
//定位第三个
定位第三个\n"
GetElem(L,3,e);
e=%c\n"
e);
//查找A的位置
查找A的位置\n"
LocateElem(L,'
)=%d\n"
LocateElem(L,'
));
//第四个位置插入f
第四个位置插入f\n"
f'
输出L"
//删除第三个元素
删除第三个元素\n"
ListDelete(L,3,e);
//释放空间
当前已经释放空间\n"
DestroyList(L);
实验二
typedefstructLNode
//定义单链表结点类型
ElemTypedata;
structLNode*next;
}LinkList;
voidInitList(LinkList*&
L=(LinkList*)malloc(sizeof(LinkList));
//创建头结点
next=NULL;
}
voidDestroyList(LinkList*&
LinkList*p=L,*q=p->
next;
while(q!
=NULL)
free(p);
p=q;
q=p->
free(p);
intListEmpty(LinkList*L)
next==NULL);
intListLength(LinkList*L)
LinkList*p=L;
inti=0;
while(p->
next!
i++;
p=p->
return(i);
voidDispList(LinkList*L)
LinkList*p=L->
while(p!
p->
data);
intGetElem(LinkList*L,inti,ElemType&
intj=0;
while(j<
i&
p!
j++;
if(p==NULL)
e=p->
data;
return1;
intLocateElem(LinkList*L,ElemTypee)
intn=1;
=NULL&
p->
data!
=e)
n++;
return(0);
return(n);
intListInsert(LinkList*&
LinkList*p=L,*s;
i-1&
if(p==NULL)//未找到第i-1个结点
else//找到第i-1个结点*p
s=(LinkList*)malloc(sizeof(LinkList));
//创建新结点*s
s->
data=e;
next=p->
//将*s插入到*p之后
p->
next=s;
intListDelete(LinkList*&
LinkList*p=L,*q;
if(p==NULL)//未找到第i-1个结点
else//找到第i-1个结点*p
//q指向要删除的结点
if(q==NULL)return0;
e=q->
next=q->
//从单链表中删除*q结点
free(q);
//释放*q结点
LinkList*H;
charD;
InitList(H);
ListInsert(H,1,'
ListInsert(H,2,'
ListInsert(H,3,'
ListInsert(H,4,'
ListInsert(H,5,'
//输出H
输出H:
"
DispList(H);
判断是否为空:
if(ListEmpty(H))
当前为空\n"
printf("
当前不为空\n"
//判断A的位置
判断A的位置:
intb=LocateElem(H,'
%d"
b);
//寻找地三个元素
//GetElem(H,3,D);
//printf("
第三个元素为%s"
D);
//第四位置插入f
\n第四位置插入f"
\n输出H:
//删除第三个
已经删除第三个"
ListDelete(H,3,D);
当前链表输出H:
//销毁链表
已经销毁脸链表H\n"
DestroyList(H);
四、测试结果(程序运行结果采用截图的方式打印):
实验一结果
实验二结果
五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)
注:
内容一律使用宋体五号字,单倍行间距
通过这次实验我掌握了用C浯言对数据结构的一些问题程序的初步编程,更加牢固掌握了数据结构的部分知识,但发现了许多问题与不足。
C语言的部分知识基本快忘完了,一些基本操作也忘了一部分,造成实验的难以继续。
其次数据结构掌握的不牢不全面,我应该在今后的日子多温习温习C语言,多看看数据结构课本,多做实验,更加好的学习数据结构。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二 实验