ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vj数据结构3

2022-01-14 12:35:31  阅读:136  来源: 互联网

标签:name int Vj listsize cla stu 数据结构 string


要求

  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;
}

 

标签:name,int,Vj,listsize,cla,stu,数据结构,string
来源: https://blog.csdn.net/weixin_53437436/article/details/122491439

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有