数据结构第一次实验报告

更新时间:2023-11-16 00:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一链式结构综合设计姓名:段胜磊学号:20140404305

实验一链式结构综合设计

班级: 信科1403班

姓名:

段胜磊

学号: 20140404305

一、实验目标

本实验通过定义单向链表的数据结构,设计创建链表、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。 二、实验内容

设计一个职工信息查询系统。每个职工的信息包括,职工号,姓名,所属部门号,月薪。 (1)建立一个职工信息的单链表L。

(2)在单链表L中查找职工号为t的职工信息,并输出。 (3)在单链表L中删除职工号为t的职工信息。 (4)输出单链表L中所有的节点 三、数据结构的设计

由于职工信息在逻辑结构上是线性的,将其建立为链式结构既使得职工信息的增加可以是动态的,也使得其删除过程容易实现。 具体节点类型定义如下: Typedefstructelem

{int no; /职工号 Char name[20]; /职工姓名 Intdepno; /所属部门号 Int salary; /月薪 }elemtype

Typedefstruct node

{elemtype data; /职工信息域 struct node *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, int t)

(共6页第1页)

实验一链式结构综合设计姓名:段胜磊学号:20140404305

功能:该函数实现在含有头节点的链表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的下一个域。 五、实验结果及分析 实验结果:

结果分析:这是开始分别录入了三个职工的信息;

(共6页第2页)

实验一链式结构综合设计姓名:段胜磊学号:20140404305

结果分析:这是重新把刚才录入的所有职工信息的都输出来;

结果分析:(1)首先我们查找了职工号为222的职工信息; (2)然后接着删除职工号为222的职工信息; (3)最后输出了职工信息。 六、源代码

#include #include typedefstructelem

{ int no; //职工号 char name[20]; //职工姓名 intdepno; //所属部门号 int salary; //月薪 }elemtype;

typedefstruct node

{ elemtype data; //职工信息域 struct node *next; //链域 }Lnode;

Lnode *new() { Lnode *head,*p1;

6页第3页)

(共实验一链式结构综合设计姓名:段胜磊学号:20140404305

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(\ printf(\请输入一个职工的姓名:\\n\ scanf(\

printf(\请输入该职工所属部门号(两位数):\\n\

scanf(\

printf(\请输入该职工的月薪:\\n\ scanf(\ p1 -> next = head -> next; head -> next = p1; } return(head); }

void out(Lnode *head) { Lnode *p; p=head -> next; while(p!=NULL) {

printf(\该职工的职工号:%d\\n\ printf(\该职工的姓名:%s\\n\ printf(\该职工的所属部门号:%d\\n\ printf(\该职工的月薪:%d\\n\ p=p->next; } }

Lnode *find(Lnode *head,int t) { Lnode *p; p=head -> next; while(p!=NULL) { if(p -> data.no == t) break; else p=p -> next; }

6页第4页)

(共实验一链式结构综合设计姓名:段胜磊学号:20140404305

return(p); }

int del(Lnode *head,int t) { 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); } }

void main() { Lnode *L,*q; int x; int k; L=new(); out(L); printf(\请输入你要查找的职工号(三位数):\\n\ scanf(\ q=find(L,k); if(q == NULL) printf(\没有找到该职工的信息\ else printf(\找到该职工的信息为:\\n\ printf(\该职工的职工号:%d\\n\ printf(\该职工的姓名:%s\\n\ printf(\该职工的所属部门号:%d\\n\ printf(\该职工的月薪:%d\\n\

x=del(L,k);

6页第5页)

(共实验一链式结构综合设计姓名:段胜磊学号:20140404305

if(x == 0)

printf(\没有删除该职工的信息\\n\ else printf(\已删除该职工的信息\\n\out(L); }

(共6页第6页)

本文来源:https://www.bwwdw.com/article/56iv.html

Top