C++提供了强大的模板库,list便是其中之一。list是可以存储各种数据类型的链表,以下代码将用list存放结构体
// List_Struct_Study.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
typedef struct StudentMark//必须为类型名
{
string stuName;
string stuNumber;
int stuMark;
bool operator < (const StudentMark& c) const //重载小于运算符
{
return(stuMark < c.stuMark);
}
}StudentInfo;
typedef list <StudentInfo> StuInfoList;
void ListDisplay(StuInfoList inputList) //链表显示函数
{
list<StudentInfo>::iterator i;
for ( i = inputList.begin(); i != inputList.end(); ++i)
{
cout << i->stuName << "\t"
<< i->stuNumber << "\t"
<< i->stuMark << endl;
}
}
void ClassInput(StudentInfo& classTemp) //结构体输入函数
{
cin >> classTemp.stuName;
cin >> classTemp.stuNumber;
cin >> classTemp.stuMark;
}
void ListClassInput(StuInfoList& classcopy, int amount)//链表输入函数
{
StudentInfo classtemp;
for (int i=0; i < amount; ++i)
{
ClassInput(classtemp);
classcopy.push_front(classtemp);
}
}
void SortAndInsert(StuInfoList& listcopy,const StudentInfo& temp )//排序后有序插入函数
{
list<StudentInfo>::iterator i;
int k;
for (i = listcopy.begin(); i != listcopy.end(); ++i)
{
if (temp.stuMark <= i->stuMark)
{
listcopy.insert(i, temp);//正序插入
break;
}
}
if (i == listcopy.end())//special situation
{
listcopy.insert(i, temp);
}
}
int main()
{
printf("请输入需要录入学生的总人数\n");
int personAmount;
cin >> personAmount;
StuInfoList Class1;
printf("依次输入 姓名 学号 成绩\n");
ListClassInput(Class1,personAmount);
Class1.sort();
printf("排序完成\n");
ListDisplay(Class1);
StudentInfo extraStudent;
while (1)
{
printf("请输入需要补录的学生:\n");
ClassInput(extraStudent);
SortAndInsert(Class1, extraStudent);
printf("补录完成!\n");
ListDisplay(Class1);
}
cin.get();
cin.get();
return 0;
}