公司将100名员工的信息以链表的形式存储起来,并以工龄将其排序,构成顺序表,先从公司其他部门转来一个员工,编写程序,将新加入的员工信息录入表中
本题实现了在顺序链表中插入节点,通过对比各节点数据域的关系确定插入点的位置,然后对应插入点位置确定数据域关键字段
#include<stdio.h>
#include<stdlib.h>
struct stuffnode
{
int jobnumber;
int workingyear;
struct stuffnode *next;
}stuffarray[100]; //定义100个节点
int buildlistinfo()
{
int i=0;
struct stuffnode *start;
printf("开始处理函数buildlistinfo()\n");
start=&stuffarray[0];
for(i=0;i<100;i++)
{
stuffarray[i].jobnumber=(i+1)*4+3; //初始化链表
stuffarray[i].workingyear=(100-i)/10+1;
stuffarray[i].next=&stuffarray[i+1];
}
stuffarray[99].next=NULL; //最后一个节点引用值域赋值NULL
}
int main()
{
struct stuffnode *header=NULL;
struct stuffnode *newstuff=NULL;
struct stuffnode *tempnode=NULL;
newstuff=(struct stuffnode*)malloc(sizeof(struct stuffnode));
printf("请输入转入员工工龄:");
scanf("%d",&newstuff->workingyear);
header=&stuffarray[0];
buildlistinfo();
tempnode=header;
for(;NULL!=tempnode->next)
{
if(newstuff->workingyear==tempnode->workingyear&&newstuff->workingyear>tempnode->next->workingyear)
{
newstuff->next=tempnode->next;
tempnode->next=newstuff;
newstuff->jobnumber=tempnode->jobnumber+1;
break;
}
tempnode=tempnode->next;
}
if(NULL==tempnode->next) //插入到表位
{
tempnode->next=newstuff;
newstuff->next=NULL;
newstuff->jobnumber=tempnode->jobnumber+1;
}
tempnode=header;
for(;NULL!=tempnode->next)
{
printf("stuff's jobnumber:%d,stuff's workingyear:%d",tempnode->jobnumber,tempnode->workingyear);
tempnode=tempnode->next;
}
free(newstuff); //释放分配空间
}