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