题目如下
输入若干名员工的信息(职工号,姓名,生日,工资,其中生日是日期类型结构体),要求按照工资升序排序,输出所有员工的数据。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date
{
int iYear;
int iMonth;
int iDay;
};
struct stuff
{
char cName[20];
int iNum;
int iPage;
struct date strBirthday;
struct stuff *pStrNext;
};
//创建链表
struct stuff * create()
{
struct stuff *pStrStuffHead = 0, *pStrStuffTemp, *pStrStuffTail = 0;
char cNameTemp[20];
int iNumTemp;
int iPageTemp;
struct date strBirthdayTemp;
printf("请输入职工号(输入负数时结束):");
scanf_s("%d", &iNumTemp);
//添加结点
while (iNumTemp >= 0)
{
printf("请输入职工姓名:");
getchar();
gets_s(cNameTemp);
printf("请输入生日:");
scanf_s("%d%d%d", &strBirthdayTemp.iYear, &strBirthdayTemp.iMonth, &strBirthdayTemp.iDay);
printf("请输入工资:");
scanf_s("%d",&iPageTemp);
//申请结点
pStrStuffTemp = (struct stuff*)malloc(sizeof(struct stuff));
pStrStuffTemp->iNum = iNumTemp;
strcpy_s(pStrStuffTemp->cName, cNameTemp);
pStrStuffTemp->strBirthday = strBirthdayTemp;
pStrStuffTemp->iPage = iPageTemp;
pStrStuffTemp->pStrNext = 0;
//接入链表
if (!pStrStuffHead)
pStrStuffHead = pStrStuffTail = pStrStuffTemp;
else
{
pStrStuffTail->pStrNext = pStrStuffTemp;
pStrStuffTail = pStrStuffTemp;
}
printf("请输入职工号(输入负数时结束):");
scanf_s("%d", &iNumTemp);
}
return pStrStuffHead;
}
//选择排序
void SelectedSort(struct stuff *pStrStuffHead)
{
struct stuff *NewHead, *p = NULL, *q = NULL;
NewHead = pStrStuffHead;
int iPage = 0;
int NiPage = 0;
char cNameTemp[20];
int iNumTemp = 0;
struct date strBirthdayTemp;
if (NewHead == NULL || NewHead->pStrNext == NULL)
return;
while (NewHead != NULL)
{
p = NewHead->pStrNext;
q = NewHead->pStrNext;
iPage = NewHead->iPage;
NiPage = iPage;
while (p != NULL)
{
if (NiPage > p->iPage)
{
NiPage = p->iPage;
q = p;
}
p = p->pStrNext;
}
if (iPage != NiPage)
{
q->iPage = iPage;
NewHead->iPage = NiPage;
iNumTemp = NewHead->iNum;
NewHead->iNum = q->iNum;
q->iNum = iNumTemp;
strcpy_s(cNameTemp, NewHead->cName);
strcpy_s(NewHead->cName, q->cName);
strcpy_s(q->cName, cNameTemp);
strBirthdayTemp = NewHead->strBirthday;
NewHead->strBirthday = q->strBirthday;
q->strBirthday = strBirthdayTemp;
}
NewHead = NewHead->pStrNext;
}
}
void print(struct stuff *pStrStuffHead)
{
while (pStrStuffHead)
{
printf("%d %s\n", pStrStuffHead->iNum, pStrStuffHead->cName);
printf("生日:%d年%d月%d日\n", pStrStuffHead->strBirthday.iYear, pStrStuffHead->strBirthday.iMonth, pStrStuffHead->strBirthday.iDay);
printf("工资:%d\n", pStrStuffHead->iPage);
pStrStuffHead = pStrStuffHead->pStrNext;
}
}
int main()
{
struct stuff *pStrStuffHead;
pStrStuffHead = create();
SelectedSort(pStrStuffHead);
print(pStrStuffHead);
return 0;
}