【问题标题】:C++ Adding Elements to a List in Alphabetic OrderC++ 按字母顺序将元素添加到列表中
【发布时间】:2015-10-05 22:08:03
【问题描述】:

我有一个学生数组,我正在尝试将另一个学生添加到列表中。我正在编写 add 方法,它将根据学生的姓名按字母顺序将学生添加到列表中。然后列表中的所有其他元素将相应地移动。这是我写它的尝试:

void Array::add(Student* student)
{
  if (size == MAX_STUDENTS)
    return;
  if(size == 0){
    students[0] = student;
    size ++;
  }
  if (size != 0){
    for(int i = 0; i < MAX_STUDENTS; ++i){
      if(students[i]->getName() >= student->getName()){
        students[i-1] = student;
        size ++;
      }
    }
  }
}

students 是一个指向 Student 对象的指针数组Student** students;它在构造函数中与size一起被初始化

但是,这不会对元素进行排序。我猜我的逻辑不正确。我也不知道如何将元素向下移动到数组中。任何帮助将不胜感激。

【问题讨论】:

  • getName() 返回什么?最好包含minimal reproducible example
  • "students 是一个指向 Student 对象Student** 学生的指针数组;" 不,那是一个指针,而不是一个数组。
  • 为什么不使用std::priority_queue
  • @sfjac getName() 返回学生姓名

标签: c++ arrays sorting


【解决方案1】:

向下移动项目时,从列表中的最后一项开始,一直向上移动到插入点。应该是这样的:

int i;
for (i = size - 1; students[i]->getName() >= student->getName(); i--)
{
    students[i+1] = students[i];
}
students[i] = student;
size++;

更好的方法是让 Student 实现 std::set 或 std::priority_queue。为什么要重新发明轮子?

【讨论】:

  • 效率很低,那就是O(n),虽然如果你被数组卡住了,你可以做的最好
  • 同意。我的回答是假设这是一项作业,并且已经进行了编辑。稍后再回来链接一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2023-03-18
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多