Vj数据结构3

要求

  1. 不要使用STL
  2. 封装线性表类,提供插入,删除,查找等操作
  3. 线性表实现使用数组描述方法(顺序存储结构)

描述

设通讯录中每一个联系人的内容有:姓名、电话号码、班级、宿舍。由标准输入读入联系人信息,使用线性表中操作实现通讯录管理功能,包括:插入、删除、编辑、查找(按姓名查找);键盘输入一班级,输出通讯录中该班级中所有人的信息。

格式

每个操作的第一个数为操作数(插入-0,删除-1,编辑-2,查找-3,输出一个班所有人员信息-4),具体格式如下:

  • 0 姓名 电话 班级 宿舍 插入一条记录
  • 1 姓名 根据姓名删除一条记录
  • 2 姓名 编辑项目 项目新值 根据姓名编辑一条记录(编辑项目为1到3的整数,1代表编辑电话,2代表编辑班级,3代表编辑宿舍)
  • 3 姓名 根据姓名查找,找到输出1,未找到输出0
  • 4 班级 输出该班级的所有成员的宿舍号的异或值

其中查找操作当找到相应的人时输出1,未找到输出0。输出一个班级的人员信息时输出所有成员的宿舍号的异或值。输入数据保证合法。

输入

第一行一个n(1<=n<=20000), 代表接下来操作的数目。接下来n行代表各项操作。

输出

当遇到查找和输出一个班所有人员信息操作时输出。

样例

输入

28
0 Evan 57298577609 1 65
0 WINNIE 37367348390 4 1
3 Evan
4 6
3 WINNIE
1 Evan
4 7
1 WINNIE
3 MARYAM
3 CAMERON
3 TZIVIA
0 OMAR 16447001130 6 55
4 8
4 2
3 JADEN
3 ELIZABETH
2 OMAR 1 79409905568
3 JOSHUA
2 OMAR 1 8978214817
1 OMAR
3 Azaan
3 MARIA
0 HANNAH 94060479192 5 98
3 HEIDY
1 HANNAH
0 Axel 92066832927 3 70
1 Axel
3 TIFFANY

输出

1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0

限制

1s

#include <iostream>
#include <string>
using namespace std;
struct student{
    string name;
    string tel;
    int cla;
    int dor;
};
// 插入、查找、输出、删除
// template<class T>
class arrayList{
    public:
        arrayList(int n = 10);// 构造函数
        ~arrayList(){delete []stu;}; // 析构函数
        void insert(string &name,string &tel,int &cla,int &dor); // 插入
        void erase(string &name); // 删除
        void edit(string &name); // 编辑
        int search(string &name); // 寻找
        int output(int &cla); // 输出
        template<class T>
        void changeLength(T *&a, int oldlength, int newlength){
            T *temp = new T[newlength]; // 定义一个新数组
            int number = min(oldlength, newlength); // 选择需要复制的个数
            copy(a, a + number, temp); // 进行复制
            delete []a; // 释放原数组内存
            a = temp;
        }
    private:
        struct student *stu;
        int capacity;
        int listsize;
};
// template<class T> // 构造函数
arrayList::arrayList(int n){
    stu = new student[n];
    capacity = 10; 
    listsize = 0;
}
// template<class T> // 插入 
void arrayList::insert(string &name,string &tel,int &cla,int &dor){
    if(listsize == capacity){
        changeLength(stu, capacity, capacity * 2);
        capacity = capacity * 2;
    }
    stu[listsize].name = name;
    stu[listsize].tel = tel;
    stu[listsize].cla = cla;
    stu[listsize].dor = dor;
    listsize++;
}
// template<class T> // 删除
void arrayList::erase(string &name){
    int i = 0;
    for(; i < listsize; i++){
        if(name == stu[i].name){
            break;
        }
    }
    for(i++; i < listsize; i++){
        stu[i-1].name = stu[i].name;
        stu[i-1].tel = stu[i].tel;
        stu[i-1].cla = stu[i].cla;
        stu[i-1].dor = stu[i].dor;
    }
    listsize--;
}
// template<class T> // 查询
int arrayList::search(string &name){

    int i = 0;
    for(; i < listsize; i++){
        if(stu[i].name == name){
            break;
        }
    }
    if(i == listsize){
        return 0;
    }
    else{
        return 1;
    }
}
// template<class T> // 编辑
void arrayList::edit(string &name){
    int i = 0;
    for(; i < listsize; i++){
        if(stu[i].name == name){
            break;
        }
    }
    int x = 0;
    cin >> x;
    switch(x){
        case 1: {string w; cin >> w; stu[i].tel = w;}break;
        case 2: {int d; cin >> d; stu[i].cla = d;}break;
        case 3: {int e; cin >> e; stu[i].dor = e;}break;
        default:
            break;
    }
}
// template<class T> // 输出
int arrayList::output(int &cla){
    int x = 0;
    for(int i = 0; i < listsize; i++){
        if(stu[i].cla == cla){
            x = x ^ stu[i].dor;
        }
    }
    return x;
}
int main(){
    int q;
    cin >> q; // 输入操作数
    arrayList l;
    string name, tel;
    int cla, dor;
    int *h=new int[q];
    int k = 0;
    for(int i = 0; i < q; i++){
        int x = 0;
        cin >> x;
        switch(x){
            case 0: {cin >> name >> tel >> cla >> dor; l.insert(name, tel, cla, dor);}break;
            case 1: {string b; cin >> b; l.erase(b);}break;
            case 2: {string b; cin >> b; l.edit(b);}break;
            case 3: {string b; cin >> b; h[k] = l.search(b); k++;} break;
            case 4: {int g; cin >> g; h[k]=l.output(g);k++;}break;
            default:
                break;
        }
    }
    for(int i = 0; i < k; i++){
        cout << h[i] << endl;
    }
    
    return 0;
}

 

上一篇:epoll学习代码


下一篇:作业Day4