编写程序,初始化顺序表L(学生信息从文件读入)

时间: 2023-05-29 20:04:28 浏览: 63
这里提供一个Python的示例代码,可以从文件读取学生信息并初始化顺序表L: ```python class Student: def __init__(self, id, name, score): self.id = id self.name = name self.score = score def init_list(filename): L = [] with open(filename, 'r') as f: for line in f: id, name, score = line.strip().split(',') L.append(Student(id, name, float(score))) return L # 读取文件中的学生信息并初始化顺序表L L = init_list('students.txt') ``` 其中,`Student`类表示一个学生对象,包含学号、姓名和成绩三个属性。`init_list`函数从指定的文件中读取每行学生信息,创建一个`Student`对象并添加到顺序表L中。最后,函数返回初始化后的顺序表L。可以根据实际情况修改`Student`类的属性和`init_list`函数的实现。
相关问题

基础项目: 编写主函数,通过菜单控制及调用相应的子函数完成以下功能: (1)初始化顺序表L(学生信息从文件读入)。 (2)输出顺序表L(要求一名学生的信息占一行)。 (3)输出顺序表L的长度。 (4)输出顺序表L的第i个学生的信息,i的值可从键盘输入。 (5)输出学生x的位置,x的关键字值(学号或姓名)可从键盘输入。 (6)在第i个元素位置上插入学生x的信息,i和x的信息可从键盘输入。 (7)删除L的第i个元素,i的值可从键盘输入。 (8)删除L中学生x的信息,x的关键字值(学号或姓名)可从键盘输入。 3.拓展项目: <1>将顺序表的元素按“班级”信息分别存储到一个顺序表中。 <2>将顺序表的元素按“班级”信息有序输出,同一班级的按姓名有序输出。

主函数代码如下: #include <iostream> #include <fstream> #include <string> #include "Student.h" //学生类的头文件 #include "SeqList.h" //顺序表类的头文件 using namespace std; //从文件读入学生信息,并初始化顺序表 void initList(SeqList<Student> &L) { ifstream infile("student.txt"); //打开文件 if (!infile) { cerr << "Fail to open file: student.txt" << endl; exit(1); } Student stu; while (infile >> stu) //重载运算符>> L.insert(L.length() + 1, stu); //在末尾插入学生信息 infile.close(); //关闭文件 } //输出顺序表 void printList(SeqList<Student> &L) { for (int i = 1; i <= L.length(); i++) cout << L.get(i) << endl; //重载运算符<< } //输出顺序表长度 void printLength(SeqList<Student> &L) { cout << "Length of the list is " << L.length() << endl; } //输出第i个学生的信息 void printStudent(SeqList<Student> &L, int i) { if (i < 1 || i > L.length()) { cerr << "Invalid position!" << endl; exit(1); } cout << L.get(i) << endl; } //输出学生x的位置 void printPosition(SeqList<Student> &L, string x) { int pos = L.search(x); //查找位置 if (pos == 0) cout << "Student not found!" << endl; else cout << "Position of student " << x << " is " << pos << endl; } //在第i个元素位置上插入学生x的信息 void insertStudent(SeqList<Student> &L, int i, Student x) { if (i < 1 || i > L.length() + 1) { cerr << "Invalid position!" << endl; exit(1); } L.insert(i, x); cout << "Insert student " << x.getName() << " successfully!" << endl; } //删除第i个元素 void deleteStudent(SeqList<Student> &L, int i) { if (i < 1 || i > L.length()) { cerr << "Invalid position!" << endl; exit(1); } Student stu = L.get(i); L.remove(i); cout << "Delete student " << stu.getName() << " successfully!" << endl; } //删除学生x的信息 void deleteStudent(SeqList<Student> &L, string x) { int pos = L.search(x); //查找位置 if (pos == 0) { cout << "Student not found!" << endl; return; } Student stu = L.get(pos); L.remove(pos); cout << "Delete student " << stu.getName() << " successfully!" << endl; } int main() { SeqList<Student> L; //定义一个学生顺序表 initList(L); //从文件读入学生信息,并初始化顺序表 int choice; do { cout << endl << "Menu:" << endl; cout << "1. Print the list" << endl; cout << "2. Print the length of the list" << endl; cout << "3. Print the information of the i-th student" << endl; cout << "4. Print the position of the student x" << endl; cout << "5. Insert a student at the i-th position" << endl; cout << "6. Delete the i-th student" << endl; cout << "7. Delete the student x" << endl; cout << "0. Exit" << endl; cout << "Enter your choice: "; cin >> choice; switch (choice) { case 0: break; case 1: printList(L); break; case 2: printLength(L); break; case 3: int i; cout << "Enter the position of the student: "; cin >> i; printStudent(L, i); break; case 4: string x; cout << "Enter the keyword of the student: "; cin >> x; printPosition(L, x); break; case 5: Student stu; cout << "Enter the information of the student:" << endl; cin >> stu; //重载运算符>> cout << "Enter the position to insert: "; cin >> i; insertStudent(L, i, stu); break; case 6: cout << "Enter the position to delete: "; cin >> i; deleteStudent(L, i); break; case 7: cout << "Enter the keyword of the student: "; cin >> x; deleteStudent(L, x); break; default: cerr << "Invalid choice!" << endl; break; } } while (choice != 0); return 0; }

顺序表的定义,初始化,插入,删除,并编写一个读入一个字符串,把它顺序存入一个顺序表并逆序打印出

顺序表是一种线性数据结构,它用一组连续的存储单元来存储数据元素,其特点是可以随机访问任何一个元素。 定义:顺序表可以用数组来实现,定义一个固定大小的数组作为顺序表的存储空间,并在数组中依次存放顺序表中的元素。 初始化:顺序表的初始化就是将其元素个数设置为0,即表为空。 插入:顺序表中的插入操作需要将插入位置后的元素全部向后移动一位,然后将要插入的元素放到指定位置。 删除:顺序表的删除操作需要将删除位置后的元素全部向前移动一位,然后将最后一个元素删除。 以下是一个读入一个字符串,把它顺序存入一个顺序表并逆序打印出的示例代码: ```C++ #include <iostream> #include <string> using namespace std; const int MAXSIZE = 100; // 顺序表的最大长度 typedef struct { char data[MAXSIZE]; // 顺序表的存储空间 int length; // 顺序表的当前长度 } SeqList; // 初始化顺序表 void InitList(SeqList &L) { L.length = 0; } // 插入元素 bool ListInsert(SeqList &L, int pos, char elem) { if (pos < 1 || pos > L.length + 1 || L.length >= MAXSIZE) { return false; } for (int i = L.length; i >= pos; i--) { L.data[i] = L.data[i-1]; } L.data[pos-1] = elem; L.length++; return true; } // 删除元素 bool ListDelete(SeqList &L, int pos) { if (pos < 1 || pos > L.length) { return false; } for (int i = pos; i < L.length; i++) { L.data[i-1] = L.data[i]; } L.length--; return true; } int main() { SeqList L; InitList(L); string str; cout << "请输入字符串:"; getline(cin, str); for (int i = 0; i < str.length(); i++) { ListInsert(L, i+1, str[i]); } cout << "逆序输出:"; for (int i = L.length; i >= 1; i--) { cout << L.data[i-1]; } cout << endl; return 0; } ``` 该程序首先定义了顺序表的结构体,并初始化了一个空的顺序表。接着通过 `getline()` 函数读取用户输入的字符串,并将其逐个插入到顺序表中。最后,通过循环逆序输出顺序表中的元素。

相关推荐

利用Huffman编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。 但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接受端将传来的数据编码进行译码(复原)。 对于有些信道,每端都需要一个完整的编/译码系统。 试为这样的信息收发站编写一个Huffman的编/译码系统。给定一组权值{7,9,5,6,10,1,13,15,4,8},构造一棵赫夫曼树,并计算带权路径长度WPL。 【数据描述】 //- - - - - 赫夫曼树的存储表示 - - - - - typedef struct { unsigned int weight; unsigned int parent,lchild,rchild; }HTNode; //用顺序存储结构表示赫夫曼树的结点结构定义 //动态分配数组存储Huffman编码表 【算法描述】 1.初始化:从键盘读入n个字符,以及它们的权值,建立Huffman树。 2.编码: 根据建立的Huffman树,求每个字符的Huffman编码。对给定的待编码字符序列进行编码。 3.译码: 利用已经建立好的Huffman树,对上面的编码结果译码。 译码的过程是分解电文中的字符串,从根结点出发,按字符‘0’和‘1’确定找左孩子或右孩子,直至叶结点,便求得该子串相应的字符。具体算法留给读者完成。 4.打印 Huffman 树。 【说明】 1.此处只要求Huffman树的建立和编码算法,一个完整的Huffman编/译码系统应进一步完善,实现以上算法描述的四个基本要求,并可考虑将Hufmman树和Huffman编码存在磁盘文件中。

最新推荐

recommend-type

ExcelVBA程序设计.doc

29.编写过程来初始化窗体 211 30.编写过程填充列表框控件 213 31.编写过程控制选项按钮 213 32.编写过程同步文字框和旋转按钮 214 33.编写过程关闭用户窗体 214 34.转移窗体数据到工作表 215 35.使用INFO SURVEY应用...
recommend-type

Excel_VBA教程

29.编写过程来初始化窗体 211 30.编写过程填充列表框控件 213 31.编写过程控制选项按钮 213 32.编写过程同步文字框和旋转按钮 214 33.编写过程关闭用户窗体 214 34.转移窗体数据到工作表 215 35.使用INFO SURVEY应用...
recommend-type

EXCEL编程VBA高级教程

1.2EXCEL环境中基于应用程序自动化的优点................................................................................1 1.3录制简单的宏....................................................................
recommend-type

Java课程设计-java web 网上商城,后台商品管理(前后端源码+数据库+文档) .zip

项目规划与设计: 确定系统需求,包括商品管理的功能(如添加商品、编辑商品、删除商品、查看商品列表等)。 设计数据库模型,包括商品表、类别表、库存表等。 确定系统的技术栈,如使用Spring MVC作为MVC框架、Hibernate或MyBatis作为ORM框架、Spring Security进行权限控制等。 环境搭建: 搭建开发环境,包括安装JDK、配置Servlet容器(如Tomcat)、配置数据库(如MySQL)等。 创建一个Maven项目,添加所需的依赖库。 数据库设计与创建: 根据设计好的数据库模型,在数据库中创建相应的表结构。 后端开发: 创建Java实体类,对应数据库中的表结构。 编写数据访问层(DAO)代码,实现对商品信息的增删改查操作。 编写服务层(Service)代码,实现业务逻辑,如商品管理的各种操作。 开发控制器层(Controller),实现与前端页面的交互,接收请求并调用相应的服务进行处理。 前端开发: 使用HTML、CSS和JavaScript等前端技术,设计并实现商品管理页面的界面。 通过Ajax技术,实现前后端的数据交互,如异步加载商品列表、实
recommend-type

母线电容计算 .xmcd

变频器 母线电容计算 mathcad
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。