c++程序设计实验十.doc_第1页
c++程序设计实验十.doc_第2页
c++程序设计实验十.doc_第3页
c++程序设计实验十.doc_第4页
c++程序设计实验十.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验十1实验目的(1)理解链表的概念及使用链表的优点。(2)学会链表的建立、查询、输出、删除、排序等操作。(3)初步学会用链表处理职工工资等实际问题。2实验要求(1)编写实验程序;(2)在VC+运行环境中,输入源程序;(3)编译运行源程序;(4)输入测试数据进行程序测试;(5)写出运行结果。3实验内容(1)建立一个描述职工工资的无序链表,各结点内容如表8.4所示。计算出各职工的实发工资,并输出链表中各职工结点的内容。最后删除链表,回收链表占用空间。建立无序链表、计算实发工资(实发工资=应发工资-税金)、输出链表、删除链表各用一个函数实现。在主函数中调用四个函数完成上述操作。表8.4 职工工资表no(工号)name8 (姓名)dsalary (应发工资) tax(税金)fsalary (实发工资)1001Zhang1900851002Wang1800801003Li1700701004Zhou200090(2)在实验(1)的基础上,再编写能删除指定工号结点的函数,能在指定工号结点前插入新职工结点的函数。在主函数中输入要删除与插入结点的工号,并调用删除与插入函数删除与插入指定结点。插入新职工的信息在插入函数内输入。(3)建立一个描述职工工资的有序链表,各结点内容如表8.4所示,输入职工信息时自动计算实发工资,链表按实发工资升序排列。输出有序链表各结点内容,最后删除链表。 4解答参考(1)# include # include struct employee int no; char name8; float salary,tax; float fsalary; node *next;node * Create(void ) int no; /定义输入职工工号的临时变量no node *head,*pn,*pt; /定义链表头指针、新结点指针、尾指针head、pn、pt。 head=0; /链表头指针赋0,表示链表为空。 cout产生无序链表,请输入工号、姓名、应发工资、税金,以工号为-1结束:no; /输入职工工号 while (no!= -1) /工号为-1时结束输入 pn= new node; /动态分配新结点内存空间,并将结点地址赋给pn。 pn-no=no; /将职工工号输入新结点 cinpn-name ; /职工姓名输入新结点 cinpn-salary ; /应发工资输入新结点 cinpn-tax ; /税金输入新结点 if (head=0) /若链表为空 head=pn;/则将新结点地址由pn赋给头指针head与尾指针pt pt=pn; /使新结点加入到链首 else /否则链表非空 pt-next=pn;/将新结点地址由pn赋给链尾的next指针与尾指针pt pt=pn; /使新结点加入到链尾 cin no; /输入职工工号 pt-next=0; /链尾指针变量赋0 return (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; cout输出链表中各结点值:endl; while (p!=0 ) coutnotnametsalary ttaxtfsalarytnext; void Delchain(node * head) node * p; p=head; /链表头指针赋给p while (head) /当链表非空时删除结点 head=p-next; /将链表下一个结点指针赋给head delete p; /删除链表第一个结点 p=head; /再将头指针赋给p void 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 wang 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; /定义输入职工工号的临时变量no node *head,*pn,*pt; /定义链表头指针、新结点指针、尾指针head、pn、pt。 head=0; /链表头指针赋0,表示链表为空。 cout产生无序链表,请输入工号、姓名、应发工资、税金,以工号为-1结束:no; /输入职工工号 while (no!= -1) /成绩为-1时结束输入 pn= new node; /动态分配新结点内存空间,并将结点地址赋给pn。 pn-no=no; /将职工工号输入新结点 cinpn-name ; /职工姓名输入新结点 cinpn-salary ; /应发工资输入新结点 cinpn-tax ; /税金输入新结点 if (head=0) /若链表为空 head=pn;/则将新结点地址由pn赋给头指针head与尾指针pt pt=pn; /使新结点加入到链首 else /否则链表非空 pt-next=pn;/将新结点地址由pn赋给链尾的next指针与尾指针pt pt=pn; /使新结点加入到链尾 cin no; /输入职工工号 pt-next=0; /链尾指针变量赋0 return (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; cout输出链表中各结点值:endl; while (p!=0 ) coutnotnametsalary ttaxtfsalarytnext; void Delchain(node * head) node * p; p=head; /链表头指针赋给p while (head) /当链表非空时删除结点 head=p-next; /将链表下一个结点指针赋给head delete p; /删除链表第一个结点 p=head; /再将头指针赋给p node *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-next!=0 ) /查找要删除的结点 pa=pc; /当前结点地址由pc赋给pa pc=pc-next; /pc指向下一个结点 if (pc=NULL) /若pc为空表示链表中无要删除的结点 cout next=pc-next;/将下结点地址赋给上结点,使删除结点从链表分离出来 delete pc; /删除指定结点 cout删除一个结点!n; head=headtemp; return head; /返回链表头指针node * Insert(node * head, int no) node *pc,*pa,*pn;/定义指向插入点前、后的指针pc与pa pn=new node; cout请输入工号、姓名、应发工资、税金 :pn-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 head; else/第一个结点不是要插入的结点 while (pc-no!=no & pc-next!=0 ) /查找要插入的结点位置 pa=pc; /当前结点地址由pc赋给pa pc=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=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 Zhang 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 *next;void Print(const node *head) const node *p; p=head; cout输出链表中各结点值:endl; while (p!=0 ) coutnotnametsalary ttaxtfsalarytnext; void Delchain(node * head) node * p; p=head; /链表头指针赋给p while (head) /当链表非空时删除结点 head=p-next; /将链表下一个结点指针赋给head delete p; /删除链表第一个结点 p=head; /再将头指针赋给p node * Insert(node * head, node *pn) node *pc,*pa;/定义指向插入点前、后的指针pc与pa pc=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 & pn-fsalary=pc-fsalary) /若链表非空,则按实发工资查找插/入点 pa=pc; / pc、pa移到插入点前、后结点处 pc=pc-next; if (pn-score = pc-score) /新结点插入到链尾 pc-next=pn; pn-next=0; else /新结点插入到链表中间 pn-next=pc; pa-next=pn; return head; /返回链表头指针node *Create_sort( void) node *pn,*head=0; /定义指向新结点的指针变量pn及链表头指针head int no; /定义输入职工工号临时变量no coutno; /输入职工工号 while (no!= -1) /工号不等于-1则循环 pn=new node; /动态分配node类型结点空间,并将其地址赋给pn pn-no=no; cinpn-name; /输入职工姓名 cinpn-salary; cinpn-tax; pn-fsalary=pn-salary-pn-tax; head=Insert(head,pn); /调用结点插入函数,将新结点按实发工资降序插入链表 cinno; /输入职工工号 return head; /返回链表头指针void mai

温馨提示

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

评论

0/150

提交评论