数据结构课程链表设计报告Word格式.docx
- 文档编号:4759535
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:16
- 大小:172.01KB
数据结构课程链表设计报告Word格式.docx
《数据结构课程链表设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程链表设计报告Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
软件环境:
VC6.0
三、算法设计的思想
选用单链表作为数据元素的存储结构,对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数值,指针域指向下一个结点
数据结构
单链表结点类型
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LinkList;
模块划分
voidInitList(LinkList&
L)//初始化
intListInsert_L(LinkList&
L,inti,ElemTypee)//插入元素
ElemTypeListDelete_L(LinkList&
L,inti)//删除元素
intCount(LinkListL,ElemTypee)//查找元素的位置
voidPrintList(LinkListL)//打印链表
LinkListSortList(LinkList*L)//递增排序函数
voidReverseOrder(LinkList&
L)//求逆序
voidmain()//主函数,分别调用以上的子函数
功能设计
首先利用元素插入法建立链表建立链表,然后导出菜单,用switch调用各个子函数,实现链表的查找、删除、计数、输出、排序、逆置等运算,其中元素插入用的是头插法,排序用的是冒泡法。
四、算法的流程图
主流程图:
元素插入:
N
Y
五、算法设计分析
首先利用元素插入法建立链表建立链表,然后导出菜单,用switch调用各个子函数,实现链表的查找、删除、计数、输出、排序、逆置等运算,其中元素插入用的是头插法,排序用的是冒泡法,冒泡排序是稳定排序
for(p=L;
p!
=NULL;
p=p->
next)
{for(q=p->
next;
q!
q=q->
{
if(p->
data>
q->
data)
{
temp=q->
data;
q->
data=p->
p->
data=temp;
}
}
}
六、源代码
#defineNULL0
#include<
stdio.h>
malloc.h>
typedefintElemType;
L)//初始化
{
L.next=NULL;
}
L,inti,ElemTypee)//插入元素
LinkList*s,*p;
p=&
L;
intj=0;
while(p&
&
j<
i-1)
{
p=p->
j++;
if(!
p||j>
i-1)return0;
s=(LinkList*)malloc(sizeof(LinkList));
s->
data=e;
next=p->
p->
next=s;
return1;
L,inti)//删除元素
LinkList*q,*p=&
ElemTypee;
while(p->
next&
p->
j>
return0;
q=p->
next=q->
e=q->
free(q);
returne;
intCount(LinkListL,ElemTypee)//查找元素的位置
LinkList*p=L.next;
intn=1;
while(p)
if(p->
data==e)
returnn;
n++;
return0;
L)//求逆序
LinkList*p1,*s,*p=L.next;
s=p->
next=NULL;
while(s->
p1=s->
s->
next=p;
p=s;
s=p1;
L.next=s;
voidPrintList(LinkListL)//打印链表
LinkList*p;
p=L.next;
printf("
%d"
p->
data);
printf("
\n"
);
intListlength(LinkList*L)//求链表长度
{
LNode*p;
//链表的单个元素指针,而不能用链表
p=L;
//将其指向链表的第一个元素
next!
=NULL)
{
++j;
}
returnj;
LinkListSortList(LinkList*L)//递增排序函数:
入口参数:
链表的头指针,此为链表中的排序函数
LinkList*p,*q;
inttemp;
for(q=p->
return*L;
voidmain()
LinkListHY;
InitList(HY);
intn,i=1;
ElemTypee=1,x;
请输入HY链表中的元素(按0结束):
while(e)
scanf("
%d"
&
e);
if(!
e)break;
ListInsert_L(HY,i++,e);
for(i=0;
i<
20;
i++)
**"
*请输入以下数字执行相应程序:
*"
*1:
向链表中插入元素*"
*2:
删除链表中的某个元素*"
*3:
按值查找元素的位置*"
*4:
统计链表中元素个数*"
*5:
输出链表*"
*6:
将链表中元素按升序排列*"
*7:
求链表的逆序*"
intkeyL;
label:
请输入数字执行相应程序,按0结束程序!
scanf("
keyL);
keyL)gotoend;
switch(keyL)
case1:
请输入在HY链表中要插入的位置和数(用空格隔开):
%d%d"
i,&
ListInsert_L(HY,i,e);
break;
case2:
请输入删除HY链表中第几个元素:
n);
x=ListDelete_L(HY,n);
删除了第%d个元素%d\n"
n,x);
case3:
请输入一个数,查找它的位置:
if(Count(HY,e))
printf("
找到它的位置:
第%d个\n"
Count(HY,e));
case4:
该链表的元素个数为:
%d\n"
Listlength(&
HY));
case5:
当前链表的元素如下:
PrintList(HY);
case6:
按升序排序后的链表如下:
SortList(&
HY);
case7:
当前链表的逆序如下:
ReverseOrder(HY);
default:
输入错误!
gotolabel;
gotolabel;
end:
程序结束!
七、运行结果分析
向链表中插入元素,把18插入到第二个位置:
删除第4个元素7
按值查找元素位置,找23:
统计元素个数
升序排列元素
求链表的逆序
八、收获及体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程 设计 报告