前言
大家好,我是 JaYLove0589,今天给大家带来 C++语言,数据结构的一道题目详解。这次题当初难倒了我好长时间,花了我几天几晚时间,查阅各种资源,最后才大功告成,里面满满写着我的笔记和心得。
代码
#include <iostream>
#include <list>
using namespace std;
/// 单间寝室结点
struct SDormNode {
string stuName;
string dormNo;
};
/// 宿舍类,集成了可用宿舍和已用宿舍
class CDorm {
public:
/// 类构造函数, 假设某校有20间宿舍,宿舍编号101,102,...,120。每间只住一名学生
CDorm(int free_len_ = 0);
~CDorm();
/// 初始宿舍状态
void Initial();
/// 为学生分配宿舍,从可用宿舍链表头摘取一间宿舍,
/// 按宿舍号升序挂在已用宿舍链表中。
/// @param name_ 学生姓名
// void Assign(string name_);
void Assign(const string& name_); //此写法更好
/// 学生退宿舍,删除已用宿舍链表中对应结点,
/// 挂在可用宿舍链表尾部。
/// @param no_ 宿舍号
void Return(const string& no_);
/// 输出可用宿舍链表信息
void Display_free() const;
/// 输出已用宿舍链表信息
void Display_used() const;
void Cmd();
public:
// 用两个链表(已用宿舍链表和可用宿舍链表)维护宿舍的管理,实现宿舍分配、宿舍交回。
list<SDormNode> m_used;
list<SDormNode> m_free;
};
CDorm::CDorm(int free_len_) {
// 重定义容器大小,可用宿舍有 free_len_间
m_free.resize(free_len_);
// char no[3] = {'1', '0', '1'};
string no("101");
// 编号依次递增, 溢出则抛出异常
auto no_add = [&no] {
if (no[2] != '9') {
++no[