数据结构第一次实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一链式结构综合设计
班级:信科1403班姓段胜磊学2014040430
名:号:5
一、实验目标
本实验通过定义单向链表的数据结构,设计创建链表、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。
二、实验内容
设计一个职工信息查询系统。每个职工的信息包括,职工号,姓名,所属部门号,月薪。
(1)建立一个职工信息的单链表L。
(2)在单链表L中查找职工号为t的职工信息,并输出。
(3)在单链表L中删除职工号为t的职工信息。
(4)输出单链表L中所有的节点
三、数据结构的设计
由于职工信息在逻辑结构上是线性的,将其建立为链式结构既使得职工信息的增加可以是动态的,也使得其删除过程容易实现。
具体节点类型定义如下:
Typedef struct elem
{int no; /职工号
Char n ame[20]; / 职工姓名
Int dep no; /所属部门号
Data 域 Next 域
四、各功能函数的设计
(1)建立链表函数 Lnode *new (void )
功能:该函数实现建立一个含有头节点的链表 。
具体过程:
1) 建立一个含有头节点的空链表 L 。
2) 输入一个新的职工信息。如为非法信息则建立链表过程结束执行
6),否则继续 3 )。
3) 建立一个新节点p ,并将输入的信息记录在节点 p 的data 域。
4) 将节点p 跟在链表L 的头节点之后。
5) 继续2)
6) 返回链表的头指针。
Int salary; /月薪
}elemtype
Typedef struct node
{elemtype data; struct node *n ext; /职工信息域
/链域
}Lnode 节点的示例图
(2)查找职工号为t 的职工信息函数Lnode *find(Lnode *L, int t)
功能:该函数实现在含有头节点的链表L上查找职工号为t的职工信息,找到则返回
该节点的指针,否则返回NULL。
具体过程:
1) 建立一个新节点,并且定义一个t 作为要查找的职工号。然后把头结点的next 域赋值给p 节点。
2) 接着判断p 节点指向的链表是否为NULL。
3) 如果p节点指向的链表不为空,则判断节点p中的职工号是否为t职工号,如果不是则p 节点指向它的下一个域。
4) 返回节点p 。
(3)删除职工号为t 的职工信息函数int del(Lnode *L, int t)
功能:该函数实现在一个含有头节点的链表L上删除职工号为t的职工信息,删除成
功则返回1,否则返回0。
具体过程:
1) 建立两个新节点p 和q,然后把该链表的头结点赋值给节点p。
2) 判断节点p 的下一个域是否为空。
3) 如果节点p 的下一个域为空,则返回0;否则,把节点p 的下一个域赋值给节点q,接着节点q 的下一个域赋值给节点p 的下一个域。
4) 返回1
(4)输出职工信息函数void out(Lnode *p)
功能:该函数实现输出p 所指节点的职工信息。
具体过程:
1) 建立一个新的节点 p 。
2) 判断p 是否为空。
3) 如果p 不为空,则分别输出职工信息。
4) 然后使节点p 指向节点P 的下一个域。
五、实验结果及分析
实验结果: 部门号〔两位数), ■月薪. 辅入一t 职工号(三应数J .
轡.入一 -1■职工的i±名; 蛊人该职工所属霜;I 号〔两位数八 辎人册工快月為
结果分析:这是重新把刚才录入的所有职工信息的都输出来结果分析:这是开始分别录入了三个职工的信息 -
职
职
职职22
蛋环011蛋殆3 J 0 33乐号盹 ’M $c 10 号.部上号.•部:号:部」 丄名暮工名暮工名 职姓所月职姓所月职姓所月_ 一二二二
结果分析:(1)首先我们查找了职工号为222的职工信息;
(2)然后接着删除职工号为222的职工信息;
(3)最后输出了职工信息。
六、源代码
#in clude
#in clude
{ int no; //职工号
char n ame[20]; //职工姓名
int dep no; //所属部门号
int salary; //月薪
}elemtype;
typedef struct node
{ elemtype data; //职工信息域
struct node *n ext; //链域
}Lnode;
Lnode *new()
{
Lnode *head,*p1;
int n=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 -> );
printf(" 请输入该职工所属部门号 ( 两位数 ):\n");
scanf("%d",&p1 -> data.depno);
printf(" 请输入该职工的月薪:\n");
scanf("%d",&p1 -> data.salary);
p1 -> next = head -> next;
head -> next = p1;
}
return(head);
void out(Lnode *head)