数据结构第一次实验报告.docx
- 文档编号:11085601
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:9
- 大小:56.70KB
数据结构第一次实验报告.docx
《数据结构第一次实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构第一次实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构第一次实验报告
实验一链式结构综合设计
班级:
信科1403班
姓名:
段胜磊
学号:
20140404305
一、实验目标
本实验通过定义单向链表的数据结构,设计创建链表、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。
二、实验内容
设计一个职工信息查询系统。
每个职工的信息包括,职工号,姓名,所属部门号,月薪。
(1)建立一个职工信息的单链表L。
(2)在单链表L中查找职工号为t的职工信息,并输出。
(3)在单链表L中删除职工号为t的职工信息。
(4)输出单链表L中所有的节点
三、数据结构的设计
由于职工信息在逻辑结构上是线性的,将其建立为链式结构既使得职工信息的增加可以是动态的,也使得其删除过程容易实现。
具体节点类型定义如下:
Typedefstructelem
{intno;/职工号
Charname[20];/职工姓名
Intdepno;/所属部门号
Intsalary;/月薪
}elemtype
Typedefstructnode
{elemtypedata;/职工信息域
structnode*next;/链域
}Lnode
节点的示例图:
Data域Next域
职工号
职工姓名
所属部门号
月薪
--------->
四、各功能函数的设计
(1)建立链表函数Lnode*new(void)
功能:
该函数实现建立一个含有头节点的链表。
具体过程:
1)建立一个含有头节点的空链表L。
2)输入一个新的职工信息。
如为非法信息则建立链表过程结束执行6),否则继续3)。
3)建立一个新节点p,并将输入的信息记录在节点p的data域。
4)将节点p跟在链表L的头节点之后。
5)继续2)
6)返回链表的头指针。
(2)查找职工号为t的职工信息函数Lnode*find(Lnode*L,intt)
功能:
该函数实现在含有头节点的链表L上查找职工号为t的职工信息,找到则返回该节点的指针,否则返回NULL。
具体过程:
1)建立一个新节点,并且定义一个t作为要查找的职工号。
然后把头结点的next域赋值给p节点。
2)接着判断p节点指向的链表是否为NULL。
3)如果p节点指向的链表不为空,则判断节点p中的职工号是否为t职工号,如果不是则p节点指向它的下一个域。
4)返回节点p。
(3)删除职工号为t的职工信息函数intdel(Lnode*L,intt)
功能:
该函数实现在一个含有头节点的链表L上删除职工号为t的职工信息,删除成功则返回1,否则返回0。
具体过程:
1)建立两个新节点p和q,然后把该链表的头结点赋值给节点p。
2)判断节点p的下一个域是否为空。
3)如果节点p的下一个域为空,则返回0;否则,把节点p的下一个域赋值给节点q,接着节点q的下一个域赋值给节点p的下一个域。
4)返回1
(4)输出职工信息函数voidout(Lnode*p)
功能:
该函数实现输出p所指节点的职工信息。
具体过程:
1)建立一个新的节点p。
2)判断p是否为空。
3)如果p不为空,则分别输出职工信息。
4)然后使节点p指向节点P的下一个域。
五、实验结果及分析
实验结果:
结果分析:
这是开始分别录入了三个职工的信息;
结果分析:
这是重新把刚才录入的所有职工信息的都输出来;
结果分析:
(1)首先我们查找了职工号为222的职工信息;
(2)然后接着删除职工号为222的职工信息;
(3)最后输出了职工信息。
六、源代码
#include
#include
typedefstructelem
{intno;//职工号
charname[20];//职工姓名
intdepno;//所属部门号
intsalary;//月薪
}elemtype;
typedefstructnode
{elemtypedata;//职工信息域
structnode*next;//链域
}Lnode;
Lnode*new()
{
Lnode*head,*p1;
intn=3,k;
head=(Lnode*)malloc(sizeof(Lnode));
head->next=NULL;
for(k=1;k<=n;k++)
{
p1=(Lnode*)malloc(sizeof(Lnode));
printf("请输入一个职工号(三位数):
\n");
scanf("%d",&p1->data.no);
printf("请输入一个职工的姓名:
\n");
scanf("%s",p1->data.name);
printf("请输入该职工所属部门号(两位数):
\n");
scanf("%d",&p1->data.depno);
printf("请输入该职工的月薪:
\n");
scanf("%d",&p1->data.salary);
p1->next=head->next;
head->next=p1;
}
return(head);
}
voidout(Lnode*head)
{
Lnode*p;
p=head->next;
while(p!
=NULL)
{
printf("该职工的职工号:
%d\n",p->data.no);
printf("该职工的姓名:
%s\n",p->data.name);
printf("该职工的所属部门号:
%d\n",p->data.depno);
printf("该职工的月薪:
%d\n",p->data.salary);
p=p->next;
}
}
Lnode*find(Lnode*head,intt)
{
Lnode*p;
p=head->next;
while(p!
=NULL)
{
if(p->data.no==t)
break;
else
p=p->next;
}
return(p);
}
intdel(Lnode*head,intt)
{
Lnode*p,*q;
p=head;
while(p->next!
=NULL)
{
if(p->next->data.no==t)
break;
else
p=p->next;
}
if(p->next==NULL)
return(0);
else
{
q=p->next;
p->next=q->next;
free(q);
return
(1);
}
}
voidmain()
{
Lnode*L,*q;
intx;
intk;
L=new();
out(L);
printf("请输入你要查找的职工号(三位数):
\n");
scanf("%d",&k);
q=find(L,k);
if(q==NULL)
printf("没有找到该职工的信息");
else
printf("找到该职工的信息为:
\n");
printf("该职工的职工号:
%d\n",q->data.no);
printf("该职工的姓名:
%s\n",q->data.name);
printf("该职工的所属部门号:
%d\n",q->data.depno);
printf("该职工的月薪:
%d\n",q->data.salary);
x=del(L,k);
if(x==0)
printf("没有删除该职工的信息\n");
else
printf("已删除该职工的信息\n");
out(L);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第一次 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)