首页 > 其他分享 >38

38

时间:2025-01-06 23:58:08浏览次数:6  
标签:std 38 name students Student 数据结构 id

实验18:迭代器模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解迭代器模式的动机,掌握该模式的结构;

2、能够利用迭代器模式解决实际问题。

 

[实验任务一]:JAVA和C++常见数据结构迭代器的使用

信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。

实验要求:

1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;

1.

Java常用数据结构及应用:数组,栈和队列

数据结构

常用数据结构

1.数组Array

2.Stack

3.队列Queue

数据结构

数据结构是为了让计算机能够更合理地组织数据、更高效地存储和处理数据而产生的。计算机中的数据往往具有复杂的关系,因此存取效率,可扩展性,顺序性,可排序性都是数据结构中的重要指标。

数据结构贯穿程序设计的始终。

 

数据表示 数据处理

抽象 逻辑结构 基本运算

实现 存储结构 算法

评价 不同数据结构的比较及算法分析

逻辑结构: 逻辑结构就是数据之间的关系。可以分为两种:线性结构和非线性结构。

线性结构:有且只有一个开始结点和一个终端结点,且所有结点都最多只有一个直接前驱和一个直接后继。如线性表,典型的有:顺序表、链表、栈(顺序栈、链栈)和队列(顺序队列、链队列)等。

非线性结构:每个结点可以有不止一个直接前驱和直接后继。常见的非线性结构有:树、图等。

存储结构: 存储结构也就是物理结构,是逻辑结构的存储映像。常见的存储结构有顺序存储、链式存储、索引存储以及散列存储(哈希表)。可以将存储结构理解为逻辑结构在计算机中的表现形式。

基本运算: 包括数据的增删改查和排序,根据逻辑结构来定义,根据算法和存储结构来实现。

算法: 算法可以理解为解决问题的步骤。对于数据结构来说,如何插入、寻找和删除一个数据项以及如何迭代地访问某一数据结构中的各数据项等都属于算法的范畴。另一个我们熟知的范畴就是排序。

 

常用数据结构

数据结构可以划分为三类:线性(排序)结构,树形结构,图形结构。

Java语言中最常用的数据结构包括数组、队列、链表等等

 

2. 提交源代码;

Java 源代码

首先,定义一个学生类Student:

java

public class Student {

    private String name;

    private String id;

    private int age;

 

    public Student(String name, String id, int age) {

        this.name = name;

        this.id = id;

        this.age = age;

    }

 

    // Getters

    public String getName() {

        return name;

    }

 

    public String getId() {

        return id;

    }

 

    public int getAge() {

        return age;

    }

 

    @Override

    public String toString() {

        return "Student{" +

                "name='" + name + '\'' +

                ", id='" + id + '\'' +

                ", age=" + age +

                '}';

    }}

然后,使用ArrayList和迭代器遍历学生信息:

java

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;

public class StudentIterator {

    public static void main(String[] args) {

        List<Student> students = new ArrayList<>();

        // 假设students已经被填充了44名学生的信息

        // 例如:

        students.add(new Student("Alice", "20130001", 20));

        students.add(new Student("Bob", "20130002", 21));

        // ... 添加更多学生信息

 

        // 按学号从小到大排序

        Collections.sort(students, Comparator.comparing(Student::getId));

        System.out.println("Students sorted by ID (ascending):");

        for (Student student : students) {

            System.out.println(student);

        }

 

        // 为了按学号从大到小排序,我们可以反转列表

        List<Student> reversedStudents = new ArrayList<>(students);

        Collections.reverse(reversedStudents);

        System.out.println("Students sorted by ID (descending):");

        for (Student student : reversedStudents) {

            System.out.println(student);

        }

    }}

C++ 源代码

首先,定义一个学生类Student:

cpp

#include <iostream>#include <vector>#include <algorithm>

class Student {public:

    std::string name;

    std::string id;

    int age;

 

    Student(std::string name, std::string id, int age) : name(name), id(id), age(age) {}

 

    friend bool operator<(const Student& a, const Student& b) {

        return a.id < b.id;

    }

 

    friend std::ostream& operator<<(std::ostream& os, const Student& student) {

        os << "Student{name: " << student.name << ", id: " << student.id << ", age: " << student.age << "}";

        return os;

    }};

然后,使用std::vector和迭代器遍历学生信息:

cpp

#include <iterator>#include <vector>#include <algorithm>

int main() {

    std::vector<Student> students;

    // 假设students已经被填充了44名学生的信息

    // 例如:

    students.emplace_back("Alice", "20130001", 20);

    students.emplace_back("Bob", "20130002", 21);

    // ... 添加更多学生信息

 

    // 按学号从小到大排序

    std::sort(students.begin(), students.end());

    std::cout << "Students sorted by ID (ascending):" << std::endl;

    for (const auto& student : students) {

        std::cout << student << std::endl;

    }

 

    // 为了按学号从大到小排序,我们可以反转向量

    std::reverse(students.begin(), students.end());

    std::cout << "Students sorted by ID (descending):" << std::endl;

    for (const auto& student : students) {

        std::cout << student << std::endl;

    }

 

    return 0;}

在这两个示例中,我们都使用了容器(Java中的ArrayList和C++中的std::vector)来存储学生信息,并使用了迭代器(Java中的增强型for循环和C++中的基于范围的for循环)来遍历容器中的元素。对于排序,Java使用了Collections.sort()方法,而C++使用了std::sort函数。在C++示例中,我们还定义了Student类的小于运算符,以便std::sort可以按照学号排序。

 

3. 注意编程规范。

 

 

标签:std,38,name,students,Student,数据结构,id
From: https://www.cnblogs.com/wanbeibei/p/18656550

相关文章

  • 138. 随机链表的复制(中)
    目录题目哈希表题目深拷贝一个链表,要求新链表中的每个节点都是新创建的,并且这些节点的random指针都指向新链表中的相应节点。哈希表先使用Map建立映射,然后根据映射将random和next指针指向对应的节点或者nullvarcopyRandomList=function(head){//如果链表为空......
  • 1384. 按年度列出销售总额 - 力扣(LeetCode)
    1384.按年度列出销售总额-力扣(LeetCode)目标输入Sales表:product_idperiod_startperiod_endaverage_daily_sales12019/1/252019/2/2810022018/12/12020/1/11032019/12/12020/1/311Product表:product_idproduct_name1LCPhone2LCT-Shirt3LCKeychain输出输出product......
  • springboot一德餐厅点餐系统-毕业设计源码83801
    摘 要本文介绍了基于SpringBoot框架开发的一德餐厅点餐系统的设计与实现。随着餐饮行业的数字化转型,点餐系统的重要性日益凸显。该系统旨在提供顾客便捷的点餐体验,包括菜单浏览、下单支付等功能,提升餐厅服务效率和顾客满意度。通过充分利用SpringBoot框架的优势,点餐系......
  • ABC387F
    题目还是很不错的。我们对于每一个\(i\),直接对\(a_i\)向\(i\)连一条边,很容易发现这是一个基环树。那我们直接按照套路来,考虑一个环对答案的贡献,显然环如果合法,则所有颜色相同,直接把它看成一个点即可。缩点后那剩下的解释一棵树了,我们考虑dp,设\(dp_{u,j}\)表示以\(u\)......
  • AtCoder Beginner Contest 387 赛后复盘
    省流:A,B,C,D,FA-B模拟即可。C数位dp。首先我们先将问题转换为\([1,R]\)中蛇数的个数减去\([1,L-1]\)中蛇数的个数。设\(num_i\)为数字的第\(i\)位(从左往右数)。我们设\(f_{dep,mx,lim,ze}\)表示当前第\(dep\)位,首位为\(mx\),有没有达到上限,有没有前导零。那么......
  • 381_基于springboot的粉丝公益应援服务平台
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • 382_基于springboot的网络选课管理系统
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • (赠源码)基于spark大数据分析的手机商城推荐系统的设计与实现33238-计算机原创毕设项目
    摘要随着移动互联网的快速发展,手机已经成为人们生活中必不可少的日常用品。然而,在众多手机品牌和型号中选择一款适合自己的手机变得越来越困难。为了帮助消费者在海量的手机产品中做出最佳选择,手机商城推荐系统应运而生。基于大数据分析的手机商城推荐系统的设计与实现利用......
  • 关于此题[ABC382E] Expansion Packs 概率DP的一些总结
    传送门首先看到这道题,我们发现想要求收集K个卡牌的期望开包数,必须要先求出每个包开出0~n张卡各自的概率,于是预示着这道题将要进行两次概率DP。首先我们求每个包开出0~n张卡各自的概率。这个很好求,我们假设f[i][j]表示前\(i\)张卡中开出\(j\)张卡的概率,那么显然有:\(f[i][j]=p[......
  • AtCoder Beginner Contest 386 补题
    E-MaximizeXOR题目大意给出\(n\)个数,要选\(k\)个使异或和最大。\(n\leq2\times10^5,k\leqn\)\(C_n^k\leq10^6\)思路由于那个组合数的性质,发现应该是直接深搜就可以的。可是发现T了。发现如果\(k\)很大那么还是不好处理。但是发现搜\(k\)个数和搜\(n-k\)个......