数据结构第一次实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 typedef struct elem

{ 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)

相关文档
最新文档