- 32
- 0
- 约9.25千字
- 约 9页
- 2018-10-09 发布于重庆
- 举报
C程序设计实验十
实验十
1.实验目的
(1)理解链表的概念及使用链表的优点。
(2)学会链表的建立、查询、输出、删除、排序等操作。
(3)初步学会用链表处理职工工资等实际问题。
2.实验要求
(1)编写实验程序;
(2)在VC++运行环境中,输入源程序;
(3)编译运行源程序;
(4)输入测试数据进行程序测试;
(5)写出运行结果。
3.实验内容
(1)建立一个描述职工工资的无序链表,各结点内容如表8.4所示。计算出各职工的实发工资,并输出链表中各职工结点的内容。最后删除链表,回收链表占用空间。建立无序链表、计算实发工资(实发工资=应发工资-税金)、输出链表、删除链表各用一个函数实现。在主函数中调用四个函数完成上述操作。
表8.4 职工工资表
no(工号)
name[8] (姓名)
dsalary (应发工资)
tax(税金)
fsalary (实发工资)
1001
Zhang
1900
85
1002
Wang
1800
80
1003
Li
1700
70
1004
Zhou
2000
90
(2)在实验(1)的基础上,再编写能删除指定工号结点的函数,能在指定工号结点前插入新职工结点的函数。在主函数中输入要删除与插入结点的工号,并调用删除与插入函数删除与插入指定结点。插入新职工的信息在插入函数内输入。
(3)建立一个描述职工工资的有序链表,各结点内容如表8.4所示,输入职工信息时自动计算实发工资,链表按实发工资升序排列。输出有序链表各结点内容,最后删除链表。
4.解答参考
(1)
# include iostream.h
# include string.h
struct employee
{ int no;
char name[8];
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结束:endl;
cinno; //输入职工工号
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 )
{ coutp-no\tp-name\tp-salary
\tp-tax\tp-fsalary\tendl;
p=p-next;
}
}
void Delchain(node * head)
{ n
原创力文档

文档评论(0)