实验一 线性表链式表示和实现.docx
- 文档编号:10359584
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:16
- 大小:204.52KB
实验一 线性表链式表示和实现.docx
《实验一 线性表链式表示和实现.docx》由会员分享,可在线阅读,更多相关《实验一 线性表链式表示和实现.docx(16页珍藏版)》请在冰豆网上搜索。
实验一线性表链式表示和实现
(封面)
学生实验报告
(参考样本)
学院:
软件学院
课程名称:
数据结构与算法
专业班级:
物联网173
姓名:
郑慧乐
学号:
0174280
学生实验报告
(理、工科类专业用)
学生姓名
郑慧乐
学号
0174280
同组人:
略
实验项目
实验一线性表链式表示和实现
□必修□选修
□演示性实验□验证性实验□操作性实验□综合性实验
实验地点
H113
实验仪器台号
略
指导教师
黄淑英
实验日期及节次
星期一下午三节课
一、实验综述
1、实验目的及要求
目的要明确,要抓住重点,符合实验指导书中的要求(使用时斜体字删去,下同)
1.掌握用C语言调试程序的基本方法。
2.掌握线性表的基本运算,如创建、插入、删除等。
输入链表的各个数据域的值,同时显示创建的链表结点数据;实现在第i个结点的之前插入一个新的结点,并显示插入后的链表结点情况;实现将第i个结点删除,并将删除后的链表结点情况显示出来。
2、实验仪器、设备或软件
实验所使用的仪器设备、工具等的名称及规格。
DevC++
二、实验过程(实验步骤、记录、数据、分析)
#include
#include
#include
#include
#defineOK1
#defineERROR0
#defineOVERFLOWER-2
typedefstructLNode
{
intdata;
structLNode*next;
}LNode,*LinkList;
voidCreateList(LinkList&L,intn)
{
inti;
LinkListp,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入%d个数据:
\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
voidListTraverse(LinkListL)
{
LinkListp=L->next;
while(p)
{
printf("%2d",p->data);
p=p->next;
}
printf("\n");
}
voidListInsert(LinkList&L,inti,inte)
{
intj=0;
LinkLists,p=L;
while(p&&j { j++; p=p->next; } s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; } voidListDelete(LinkList&L,inti) { intj=0; LinkListp=L,q; while((p->next)&&j { p=p->next; ++j; } q=p->next; p->next=q->next; deleteq; } intmain() { inti=3; inte=5; intn=5; intc=3; LinkListLa,Lb,Lc; CreateList(La,n); ListTraverse(La); CreateList(Lb,n); ListInsert(Lb,i,e); ListTraverse(Lb); CreateList(Lc,n); ListDelete(Lc,c); ListTraverse(Lc); returnOK; } 三、结论 1、实验结果 根据实验过程中所见到的现象和测得的数据,做出结论 2、分析讨论 对本次实验的心得体会、思考和建议。 ①例中采用了正向排序,其实还可以考虑逆向排序; ②main函数内创建、遍历、删除还可以再简化; ③界面文字的优化,对用户更加友好。 ④对插入、删除位置为0或负数的防范(error的使用) ⑤考虑用c++的形式使用 基于以上①~⑤的考虑,我又花费了一下午和晚上一点时间对代码进行了优化: #include usingnamespacestd; #defineOK1 #defineERROR0 typedefstructLNode//p30、31——单链表的存储结构 { intdata; structLNode*next; }LNode,*LinkList; voidCreatList_R(LinkList&L,intn)//p38算法2.12后插法创建单链表 { inti; LinkListr,p; L=newLNode;//用new运算符开辟动态空间,生成头结点,此处相当于L=(LinkList)malloc(sizeof(LNode)) L->next=NULL; r=L; for(i=0;i { p=newLNode;//生成新结点 cin>>p->data; p->next=NULL; r->next=p; r=p; } } intListInsert(LinkList&L,inti,inte) { LinkListp=L; LNode*s; intj=0; p=L; while(p&&(j {p=p->next;++j;} if(! p||j>i-1)returnERROR; s=newLNode; s->data=e; s->next=p->next; p->next=s; returnOK; } intListDelete(LinkList&L,inti)//p35算法2.10 { intj; LinkListp,q; p=L; j=0; while(p->next&&j {p=p->next;++j;} if(! (p->next)||j>i-1)returnERROR; q=p->next; p->next=q->next; deleteq; returnOK; } voidListTraverse(LinkListL) { LinkListp=L->next; while(p) { cout< p=p->next; } cout< } intmain(void) { LinkListL; intn;//创建的数据个数 inti;//插入到第i位 inte;//插入的数据 intd;//删除的数据 inta,b;//a==ListInsert(L,i,e);b==ListDelete(L,d); cout<<"请输入所创单链表的数据个数: "; std: : cin>>n;//等价于scanf("%d",&n); CreatList_R(L,n); cout<<"您创建的单链表为: "; ListTraverse(L); cout<<"请输入插入数据: "; std: : cin>>e; cout<<"插入到第几位: "; std: : cin>>i; a=ListInsert(L,i,e); if(a==ERROR) cout<<"操作失败! "< else ListTraverse(L); cout<<"删除数据第几位: "; std: : cin>>d; b=ListDelete(L,d); if(b==ERROR) cout<<"操作失败! "< else ListTraverse(L); } 下面是优化后的界面: 以及对error的检测利用: 下面对代码进行进一步的优化: #include usingnamespacestd; #defineOK1 #defineERROR0 typedefintElemType; typedefintStatus; typedefstructLNode//p30、31——单链表的存储结构 { ElemTypedata; structLNode*next; }LNode,*LinkList; voidCreatList_R(LinkList&L,intn)//p38算法2.12后插法创建单链表 { inti; LinkListr,p; L=newLNode;//用new运算符开辟动态空间,生成头结点,此处相当于L=(LinkList)malloc(sizeof(LNode)) L->next=NULL; r=L; for(i=0;i { p=newLNode;//生成新结点 cin>>p->data; p->next=NULL; r->next=p; r=p; } } StatusListInsert(LinkList&L,inti,ElemTypee) { LinkListp=L; LNode*s; intj=0; p=L; while(p&&(j {p=p->next;++j;} if(! p||j>i-1)returnERROR; s=newLNode; s->data=e; s->next=p->next; p->next=s; returnOK; } StatusListDelete(LinkList&L,inti)//p35算法2.10 { intj=0; LinkListp,q; p=L; while(p->next&&j {p=p->next;++j;} if(! (p->next)||j>i-1)returnERROR; q=p->next; p->next=q->next; deleteq; returnOK; } voidListTraverse(LinkListL) { LinkListp=L->next; while(p) { cout< p=p->next; } cout< } intmain(void) { LinkListL; intn;//创建的数据个数 inti;//插入到第i位 inte;//插入的数据 intd;//删除的数据 inta,b;//a==ListInsert(L,i,e);b==ListDelete(L,d); intj=1; cout<<"请输入所创单链表的数据个数: "; std: : cin>>n;//等价于scanf("%d",&n); CreatList_R(L,n); cout<<"您创建的单链表为: "; ListTraverse(L); while(j) { intchoice; cout< 插入2: 删除3: 退出): "; std: : cin>>choice; switch(choice) { case1: { cout<<"请输入插入数据: "; std: : cin>>e; cout<<"插入到第几位: "; std: : cin>>i; a=ListInsert(L,i,e); if(a==ERROR) cout<<"操作失败! "< else ListTraverse(L); break; } case2: { cout<<"删除数据第几位: "; std: : cin>>d; b=ListDelete(L,d); if(b==ERROR) cout<<"操作失败! "< else ListTraverse(L); break; } case3: { j=0; cout<<"合作愉快,下次再来! "; break; } default: cout<<"输入错误,请重新输入! "< } }下面为最终优化效果: 四、指导教师评语及成绩: 评语: 指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值 成绩: 指导教师签名: 批阅日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 线性表链式表示和实现 实验 线性 表链 表示 实现