链表的选择排序

题目如下
输入若干名员工的信息(职工号,姓名,生日,工资,其中生日是日期类型结构体),要求按照工资升序排序,输出所有员工的数据。

#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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值