数据结构第一次实验报告_第1页
数据结构第一次实验报告_第2页
数据结构第一次实验报告_第3页
数据结构第一次实验报告_第4页
数据结构第一次实验报告_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.PAGE5/NUMPAGES5实验一链式结构综合设计班级:信科1403班姓名:段胜磊学号:20140404305一、实验目标本实验通过定义单向链表的数据结构,设计创建链表、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。二、实验内容设计一个职工信息查询系统。每个职工的信息包括,职工号,姓名,所属部门号,月薪。建立一个职工信息的单链表L。在单链表L中查找职工号为t的职工信息,并输出。在单链表L中删除职工号为t的职工信息。输出单链表L中所有的节点三、数据结构的设计由于职工信息在逻辑结构上是线性的,将其建立为链式结构既使得职工信息的增加可以是动态的,也使得其删除过程容易实现。具体节点类型定义如下:Typedefstructelem{intno;/职工号Charname[20];/职工姓名Intdepno;/所属部门号Intsalary;/月薪}elemtypeTypedefstructnode{elemtypedata;/职工信息域structnode*next;/链域}Lnode节点的示例图:Data域Next域职工号职工姓名所属部门号月薪>四、各功能函数的设计〔1建立链表函数Lnode*new<void>功能:该函数实现建立一个含有头节点的链表。具体过程:1建立一个含有头节点的空链表L。2输入一个新的职工信息。如为非法信息则建立链表过程结束执行6,否则继续3。3建立一个新节点p,并将输入的信息记录在节点p的data域。4将节点p跟在链表L的头节点之后。5继续26返回链表的头指针。〔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<stdlib.h>#include<stdio.h>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->>; 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->>; 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-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论