/*
[题目]建立一个链表,每个结点包含的成员为:职工号、工资。
用malloc函数开辟新结点。要求链表包含5个结点,从键盘输入结点
中的有效数据。然后把这些结点的数据打印出来。要求
(1)用函数create来建立函数;
(2)用list函数来输出数据。[注]这5个职工的号码假设为101、103、105、107、109。
(3)写一个函数delete。
用来删除一个结点(按指定职工号删除)打印出最后的链表的各结点数据。
下面是成品,楼主妹妹可交差了
*/
#include <stdio.h>
#include <stdlib.h>
#define NUM 5 /*有效结点数即职工人数*/
typedef int Type;
struct worker
{
Type ID; /*工号*/
float gz; /*工资*/
struct worker *next;
};
struct worker* create(void)/*创建链表返回表头指针*/
{
int i,id[NUM]={101,103,105,107,109};
struct worker *head,*q,*p;
q=head=(struct worker*)malloc(sizeof(struct worker));
head->ID=NUM;/*特殊化处理:存放有效结点数目*/
head->gz=0.0;/*此项无意义*/
for(i=1;i<=NUM;i++)
{
p=(struct worker*)malloc(sizeof(struct worker));
q->next=p;
p->ID=id[i-1];
printf("职工%d的工资=",p->ID);
scanf("%f",&p->gz);
q=p;
}
p->next=NULL;
return head;
}
void list(struct worker *head)/*遍历并顺序输出结点信息*/
{
struct worker* p=head->next;
printf("\n工号 工资(元)\n");
while(p!=NULL)
{
printf("%-6d%7.2f\n",p->ID,p->gz);
p=p->next;
}
}
int delete(struct worker *head,Type ID)/*删除工号=ID的结点*/
{
int del_cnt=0;
struct worker *q=head,*p=q->next;
while(p!=NULL)
{
if(ID == p->ID)/*若满足删除条件*/
{
q->next=p->next;
free(p);
del_cnt++;
}
else
q=p;
p=q->next;
}
return del_cnt;/*返回被删除的结点的个数*/
}
int main(void)
{
int n;
Type id;
struct worker *link;
link=create();
printf("\n删除前");
list( link );
printf("\n开除谁:");
scanf( "%d",&id );
n=delete( link,id );
if(n!=0)
{
printf("\n删除后");
list( link );
}
else
{
printf("\n花名册上并无此人\n");
}
return 0;
}