收藏 分享(赏)

c++程序设计实验十new.doc

上传人:dreamzhangning 文档编号:2276394 上传时间:2018-09-09 格式:DOC 页数:9 大小:67KB
下载 相关 举报
c++程序设计实验十new.doc_第1页
第1页 / 共9页
c++程序设计实验十new.doc_第2页
第2页 / 共9页
c++程序设计实验十new.doc_第3页
第3页 / 共9页
c++程序设计实验十new.doc_第4页
第4页 / 共9页
c++程序设计实验十new.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、实验十1实验目的(1)理解链表的概念及使用链表的优点。(2)学会链表的建立、查询、输出、删除、排序等操作。(3)初步学会用链表处理职工工资等实际问题。2实验要求(1)编写实验程序;(2)在 VC+运行环境中,输入源程序;(3)编译运行源程序;(4)输入测试数据进行程序测试;(5)写出运行结果。3实验内容(1)建立一个描述职工工资的无序链表,各结点内容如表 8.4 所示。计算出各职工的实发工资,并输出链表中各职工结点的内容。最后删除链表,回收链表占用空间。建立无序链表、计算实发工资(实发工资=应发工资-税金) 、输出链表、删除链表各用一个函数实现。在主函数中调用四个函数完成上述操作。表 8.4

2、职工工资表no(工号) name8 (姓名) dsalary (应发工资) tax(税金) fsalary (实发工资 )1001 Zhang 1900 851002 Wang 1800 801003 Li 1700 701004 Zhou 2000 90(2)在实验(1)的基础上,再编写能删除指定工号结点的函数,能在指定工号结点前插入新职工结点的函数。在主函数中输入要删除与插入结点的工号,并调用删除与插入函数删除与插入指定结点。插入新职工的信息在插入函数内输入。(3)建立一个描述职工工资的有序链表,各结点内容如表 8.4 所示,输入职工信息时自动计算实发工资,链表按实发工资升序排列。输出有序

3、链表各结点内容,最后删除链表。4解答参考(1)# include # include struct employee int no;char name8;float salary,tax;float fsalary;node *next;node * Create(void ) int no; /定义输入职工工号的临时变量 nonode *head,*pn,*pt; /定义链表头指针、新结点指针、尾指针head、pn、pt。 head=0; /链表头指针赋 0,表示链表为空。coutno; /输入职工工号while (no!= -1) /工号为-1 时结束输入 pn= new node; /动

4、态分配新结点内存空间,并将结点地址赋给 pn。pn-no=no; /将职工工号输入新结点cinpn-name ; /职工姓名输入新结点cinpn-salary ; /应发工资输入新结点cinpn-tax ; /税金输入新结点if (head=0) /若链表为空 head=pn; /则将新结点地址由 pn 赋给头指针 head 与尾指针 ptpt=pn; /使新结点加入到链首else /否则链表非空 pt-next=pn; /将新结点地址由 pn 赋给链尾的 next 指针与尾指针 ptpt=pn; /使新结点加入到链尾cin no; /输入职工工号pt-next=0; /链尾指针变量赋 0re

5、turn (head); /返回链表的头指针 void Calcu(node *head) node *p;p=head;while (p!=0 ) p-fsalary=p-salary-p-tax;p=p-next;void Print(const node *head) const node *p;p=head;coutnonamesalarytaxfsalarynext;void Delchain(node * head) node * p;p=head; /链表头指针赋给 pwhile (head) /当链表非空时删除结点 head=p-next; /将链表下一个结点指针赋给 head

6、delete p; /删除链表第一个结点p=head; /再将头指针赋给 pvoid main(void) /主函数 node * head;head=Create(); /产生无序链表Calcu(head);Print(head); /输出无序链表 Delchain(head); /删除整个链表 程序运行结果:产生无序链表,请输入工号、姓名、应发工资,税金,以工号为-1 结束:1001 zhang 1900 851002 wang 1800 801003 li 1700 701004 zhou 2000 90-1输出链表中各结点值:1001 zhang 1900 85 18151002 wa

7、ng 1800 80 17201003 li 1700 70 16551004 zhou 2000 90 1910(2)# include # include struct node int no;char name8;float salary,tax;float fsalary;node *next;node * Create(void ) int no; /定义输入职工工号的临时变量 nonode *head,*pn,*pt; /定义链表头指针、新结点指针、尾指针 head、pn、pt。 head=0; /链表头指针赋 0,表示链表为空。coutno; /输入职工工号while (no!=

8、 -1) /成绩为-1 时结束输入 pn= new node; /动态分配新结点内存空间,并将结点地址赋给 pn。pn-no=no; /将职工工号输入新结点cinpn-name ; /职工姓名输入新结点cinpn-salary ; /应发工资输入新结点cinpn-tax ; /税金输入新结点if (head=0) /若链表为空 head=pn; /则将新结点地址由 pn 赋给头指针 head 与尾指针 ptpt=pn; /使新结点加入到链首else /否则链表非空 pt-next=pn; /将新结点地址由 pn 赋给链尾的 next 指针与尾指针 ptpt=pn; /使新结点加入到链尾cin

9、no; /输入职工工号pt-next=0; /链尾指针变量赋 0return (head); /返回链表的头指针 void Calcu(node *head) node *p;p=head;while (p!=0 ) p-fsalary=p-salary-p-tax;p=p-next;void Print(const node *head) const node *p;p=head;coutnonamesalarytaxfsalarynext;void Delchain(node * head) node * p;p=head; /链表头指针赋给 pwhile (head) /当链表非空时删除

10、结点 head=p-next; /将链表下一个结点指针赋给 headdelete p; /删除链表第一个结点p=head; /再将头指针赋给 pnode *Del( node *head, int no) node *pc,*pa,*headtemp;headtemp=pc=pa=head;if (head=NULL) /链表为空的情况 cout no=no) / 第一个结点为要删除结点的情况 head=pc-next; /将第二个结点的地址赋给 head,/使首结点从链表中分离出来delete pc; /删除首结点 coutno!=no /当前结点地址由 pc 赋给 papc=pc-next

11、; /pc 指向下一个结点 if (pc=NULL) /若 pc 为空表示链表中无要删除的结点cout next=pc-next;/将下结点地址赋给上结点,使删除结点从链表分离出来delete pc; /删除指定结点coutpn-nopn-namepn-salarypn-tax;pn-fsalary=pn-salary+pn-tax;pc=pa=head;if (head=0) /若链表为空,则新结点插入到链表首 head=pn;pn-next=0;return head;if (pc-no=no) / 第一个结点为要插入结点的情况 pn-next=head;head=pn;return he

12、ad;else /第一个结点不是要插入的结点 while (pc-no!=no /当前结点地址由 pc 赋给 papc=pc-next; /pc 指向下一个结点 pc-next=pn; /新结点插入到链尾pn-next=0;return head; /返回链表头指针void main(void) /主函数 node * head;int no;head=Create(); /产生无序链表Calcu(head);Print(head); /输出无序链表 coutno;head=Del(head,no); /删除指定工号的结点Print(head); /输出显示删除后的链表。coutno;head

13、=Insert(head,no); /插入指定工号的结点Print(head); /输出显示更新后的链表。 程序运行结果:产生无序链表,请输入工号、姓名、应发工资、税金,以工号为-1 结束:1001Zhang 1900 851002 Wang 1800 801003 Li 1700 701004 Zhou 2000 90-1输出链表中各结点值:1001 Zhang 1900 85 18151002 Wang 1800 80 17201003 Li 1700 70 16301004 Zhou 2000 90 1910输入要删除结点上职工工号:1003删除一个结点!输出链表中各结点值:1001 Z

14、hang 1900 85 18151002 Wang 1800 80 17201004 Zhou 2000 90 1910输入要插入结点职工工号:1005请输入工号、姓名、应发工资、税金 :1005 wu 2100 100输出链表中各结点值:1001 Zhang 1900 85 18151002 Wang 1800 80 17201004 Zhou 2000 90 19101005 wu 2100 100 2000(3)# include # include struct node int no;char name8;float salary,tax;float fsalary;node *n

15、ext;void Print(const node *head) const node *p;p=head;coutnonamesalarytaxfsalarynext;void Delchain(node * head) node * p;p=head; /链表头指针赋给 pwhile (head) /当链表非空时删除结点 head=p-next; /将链表下一个结点指针赋给 headdelete p; /删除链表第一个结点p=head; /再将头指针赋给 pnode * Insert(node * head, node *pn) node *pc,*pa; /定义指向插入点前、后的指针 p

16、c 与 papc=pa=head;if (head=0) /若链表为空,则新结点插入到链表首 head=pn;pn-next=0;return head;if (pn-fsalaryfsalary) /若新结点实发工资 首结点实发工资,/则新结点插在链首 pn-next=head;head=pn;return head;while (pc-next!=0 / pc、 pa 移到插入点前、后结点处pc=pc-next;if (pn-score = pc-score) /新结点插入到链尾 pc-next=pn;pn-next=0;else /新结点插入到链表中间 pn-next=pc;pa-nex

17、t=pn;return head; /返回链表头指针node *Create_sort( void) node *pn,*head=0; /定义指向新结点的指针变量 pn 及链表头指针 headint no; /定义输入职工工号临时变量 nocoutno; /输入职工工号while (no!= -1) /工号不等于-1 则循环 pn=new node; /动态分配 node 类型结点空间,并将其地址赋给 pnpn-no=no;cinpn-name; /输入职工姓名cinpn-salary;cinpn-tax;pn-fsalary=pn-salary-pn-tax;head=Insert(hea

18、d,pn); /调用结点插入函数,将新结点按实发工资降序插入链表cinno; /输入职工工号return head; /返回链表头指针void main(void) /主函数 node * head;head=Create_sort(); /产生一个有序链表Print (head); /输出显示有序链表Delchain(head); /删除整个链表 程序运行结果:产生一条有序链表,请输入数据,以-1 结束!1001 Zhang 1900 851002 Wang 1800 801003 Li 1700 701004 Zhou 2000 90-1输出链表中各结点值:1003 Li 1700 70 16301002 Wang 1800 80 17201001 Zhang 1900 85 18151004 Zhou 2000 90 1910

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报