C++ 线性表(顺序表)的实现与错误修正
#include
class SeqList { public: Student data[MaxSize]; int length; public: SeqList();//构造函数声明 SeqList(Student t[],int n);//带参构造函数 放入学生对象数组直接生成线性表 //~SeqList();//析构函数 void PrintList();//遍历输出 void Insert(int i, Student x);//插入学生 第i个位置插入 Student Input(); Student Delete(long _num);//删除指定学号的学生 void Append(Student x);//尾插入单个学生 }; SeqList::SeqList() { length=0; } SeqList::SeqList(Student t[],int n) { if(n>MaxSize)throw '参数非法'; // 修改错误:将length的赋值位置修改到合适的位置 length=0; // 修改错误:将length的赋值位置修改到合适的位置 for(int i=0; i<n; i++) // 修改错误:修改循环条件为i<n { Insert(i+1, t[i]); } } void SeqList::PrintList() { for(int i=0; i<length; i++) { cout<<data[i].num<<' '<<data[i].name<<' '<<data[i].score<<endl; } } void SeqList::Insert(int i, Student x) { if(length>=MaxSize) // 修改错误:将条件改为length>=MaxSize { throw '线性表已满,无法插入'; } if(i<1 || i>length+1) // 修改错误:将条件改为i<1 || i>length+1 { throw '插入位置错误'; } for(int j=length; j>=i; j--) // 修改错误:将循环条件改为j>=i { data[j] = data[j-1]; } data[i-1] = x; length++; } Student SeqList::Input() { Student s; cout<<'请输入学号:'; cin>>s.num; cout<<'请输入姓名:'; cin>>s.name; cout<<'请输入分数:'; cin>>s.score; return s; } Student SeqList::Delete(long _num) { int pos = -1; for(int i=0; i<length; i++) { if(data[i].num == _num) { pos = i; break; } } if(pos == -1) { throw '该学号不存在'; } Student res = data[pos]; for(int i=pos; i<length-1; i++) { data[i] = data[i+1]; } length--; return res; } void SeqList::Append(Student x) { if(length>=MaxSize) // 修改错误:将条件改为length>=MaxSize { throw '线性表已满,无法插入'; } data[length] = x; length++; }
int main() { Student s1 = {1, 'Alice', 90}; Student s2 = {2, 'Bob', 80}; Student s3 = {3, 'Charlie', 70}; Student s4 = {4, 'David', 60}; Student s5 = {5, 'Eve', 50}; Student t[] = {s1, s2, s3, s4, s5}; SeqList seqList(t, 5); seqList.PrintList();
return 0;
原文地址: https://www.cveoy.top/t/topic/mrg3 著作权归作者所有。请勿转载和采集!