http://blog.youkuaiyun.com/zhuzexujiaxing/article/details/70307170
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;
- }