一、实验目的

 1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。

2、巩固 C++相关的程序设计方法与技术。

 3、学会使用顺序表解决实际问题。

 

二、实验内容

1、用C++编写完整程序。

2、建立两个的顺序表,一个表存放学生信息,另一个表存放学生成绩。表的长度都为n,有学生自己确定。

3、用类模板构造函数实现相关的操作:输出,插 入,删除,查找等功能。


三、实验步骤

依据实验内容分别说明实验程序中用到的数据类型的定义;

1.   Score(stringa[], intb[], intn, intm)有参构造函数创建两个顺序表,一个为长度为n用以存放学生信息,一个长度为m用以存放学生成绩。

2.   void Insert1(stringna, inti);找到第i个元素,在第i个位置插入学生na,利用for循环将i位置后的元素从最后一个开始往外挪位置;

3.   void Insert(inten, inti);找到第i个元素,在第i个位置插入成绩en,利用for循环将i位置后的元素从最后一个开始往外挪位置;

4.   int Get(stringna);:按值查询,通过for函数依次查询,最后返回元素序号;

5.   int Locate(inti);:按位查询,运用数组特性,第i个元素储存在下标为i-1的位置;

6.   int Delete(stringna):使用for循环与if函数查找与na相同的数据在数组的位置i,删除存放此学生姓名的数据data[i-1]与学生成绩数据data[i-1],利用for循环将i位置后的元素一个个往前挪;

7.   Printlist():输出函数;


四、源代码

#include<iostream>
#include<string>
using namespace std;
class Score{
private:
 string name;
 int english;
 int length1;
 int length2;
 string data1[10];
 int data2[10];
public:
 Score() {}
 Score(string a[], int b[], int n, int m) {
  if (n > 10)throw"参数非法";
  for (int i = 0; i < n; i++) {
   data1[i] = a[i];
   length1 = n;
  }
  if (m > 10)throw"参数非法";
  for (int j = 0; j < 10; j++) {
   data2[j] = b[j];
   length2 = m;
  }
 }
  void Insert1(string na, int i);
  void Insert(int en, int i);
  int Get(string na);
  int Locate(int i);
  int Delete(string na);
  void Printlist();
 };
 void Score::Insert1(string na, int i) {
  if (length1 >= 10)throw"上溢";
  if (i<1 || i>length1)throw"位置异常";
  for (int j = length1; j >= i; j--) {
   data1[j] = data1[j - 1];
   data1[i] = na;
   length1++;
  }
 }
 void Score::Insert(int en, int i) {
  if (length2 >= 10)throw"上溢";
  if (i<1 || i>length2)throw"位置异常";
  for (int j = length2; j >= i; j--) {
   data2[j] = data2[j - 1];
   data2[i] = en;
   length1++;
  }
 }
 int Score::Get(string na) {
  for (int i = 0; i < length1; i++) {
   if (data1[i] == na)
    return data2[i + 1];
  }
  return 0;
 }
 int Score::Locate(int i) {
  if (i<1 || i>length1)throw"位置异常";
  return data2[i - 1];
 }
 int Score::Delete(string na) {
  if (length1 == 0)throw"下溢";
  for (int i = 1; i <= length1; i++) {
   if (data1[i - 1] == na) {
    for (int j = i; j < length1; j++) {
     data1[j - 1] = data1[j];
     data2[j - 1] = data2[j];
     length1--;
     length2--;
    }
   }
  }
 }
 void Score::Printlist() {
  for (int i = 0; i < length1; i++)
   if (i == 0)
    cout << "[" << data1[i] << ":" << data2[i] << "," << endl;
   else if (i == length1 - 1)
    cout << data1[i] << "," << data2[i] << "]" << endl;
   else
    cout << data1[i] << ":" << data2[i] << "," << endl;
 }

 int main() {
  string a[3] = { "keeva","佑镇","Daniel" };
  int b[3] = { 99,89,87 };
  Score K(a, b, 3, 3);
  cout << "输入数据:" << endl;
  K.Printlist();
  cout << "--------------------------------------------------------------" << endl;
  cout << "在第二个位置插入一名学生数据结构成绩:" << endl;
  K.Insert1("kk", 2);
  K.Insert(85, 2);
  K.Printlist();
  cout << "--------------------------------------------------------------" << endl;
  cout << "查找佑镇的数据结构成绩:" << K.Get("佑镇") << endl;
  cout << "--------------------------------------------------------------" << endl;
  cout << "查找第一个学生数据结构成绩:" << K.Locate(1) << endl;
  cout << "--------------------------------------------------------------" << endl;
  cout << "删除kk的数据结构成绩:" << K.Delete("kk") << endl;
  K.Printlist();
 }

 

五、实验结果

数据结构线性表的综合实验——顺序表

六、总结与疑问

  1、结果能输出,但会有额外的乱码?

相关文章: