数据结构 第二章 线性表 英语成绩表的单链表实现
2014-10-19 21:46
519 查看
一、数据类型的定义
二、C++代码段
头文件ScoreLink.h
源码文件ScoreLink.cpp
源码文件ScoreSeq_main.cpp
三、运行结果
struct Escore //定义结构体存放学生信息 { string name; string num; float score; Escore * next; }; class ScoreLink { public: ScoreLink(); //无参构造函数,创建一个空表 ScoreLink(Escore a[], int n); //有参构造函数 ~ScoreLink(); //析构函数 void Input(Escore x); //在表末输入学生信息 Escore Get(int i); //返回第i个学生信息 void Delete(int i); //删除第i个学生信息 int LocateName(string x); //按姓名返回学生序号 int LocateNum(string x); //按学号返回学生序号 int LocateScore(float x); //按分数返回学生序号 void PrintList(); //按序号依次输出各元素 private: Escore * first; //单链表的头指针 };
二、C++代码段
头文件ScoreLink.h
#include <string> //引入字符串处理学生姓名和学号
#ifndef ScoreLink_H //避免重复包含ScoreLink.h头文件
#define ScoreLink_H
struct Escore //定义结构体存放学生信息 { string name; string num; float score; Escore * next; }; class ScoreLink { public: ScoreLink(); //无参构造函数,创建一个空表 ScoreLink(Escore a[], int n); //有参构造函数 ~ScoreLink(); //析构函数 void Input(Escore x); //在表末输入学生信息 Escore Get(int i); //返回第i个学生信息 void Delete(int i); //删除第i个学生信息 int LocateName(string x); //按姓名返回学生序号 int LocateNum(string x); //按学号返回学生序号 int LocateScore(float x); //按分数返回学生序号 void PrintList(); //按序号依次输出各元素 private: Escore * first; //单链表的头指针 };
#endif
源码文件ScoreLink.cpp
#include <iostream> using namespace std; #include "ScoreLink.h" ScoreLink::ScoreLink() { first = new Escore; first->next = NULL; } ScoreLink::ScoreLink(Escore a[], int n) { Escore *r, *s; first = new Escore; r = first; for (int i = 0; i < n; i++) { s = new Escore; s->name = a[i].name; s->num = a[i].num; s->score = a[i].score; r -> next = s; r = s; } r->next = NULL; } ScoreLink::~ScoreLink() { Escore *q = NULL; while (first!=NULL) { q = first; first = first->next; delete q; } } //在表末输入学生信息 void ScoreLink::Input(Escore x) { Escore *p = first, *s = NULL; while (p->next!=NULL) { p = p->next; } s = new Escore; s->name = x.name; s->num = x.num; s->score = x.score; p->next = s; s->next = NULL; } // 查找序号为i的学生信息 Escore ScoreLink::Get(int i) { Escore *p=first; int count=0; while (p!=NULL) { p = p->next; count++; } if (i<1 && i>count) throw"查找位置非法"; else { p = first; while (i != 0) { p = p->next; i--; } return *p; } } // 查找姓名等于x的元素 int ScoreLink::LocateName(string x) { Escore *p = first->next; int i=1; while (p != NULL) { if (p->name == x) { return i; break; } else { p = p->next; i++; } } } // 查找学号等于x的元素 int ScoreLink::LocateNum(string x) { Escore *p = first->next; int i = 1; while (p != NULL) { if (p->num == x) { return i; break; } else { p = p->next; i++; } } } // 查找英语成绩等于x的元素 int ScoreLink::LocateScore(float x) { Escore *p = first->next; int i = 1; while (p != NULL) { if (p->score == x) { return i; break; } else { p = p->next; i++; } } } // 删除元素 void ScoreLink::Delete(int i) { Escore *p = first, *q = NULL; int count = 0; while (p!=NULL&&count<i-1) { p = p->next; count++; } if (p == NULL || p->next == NULL) throw"位置"; else { q = p->next; p->next = q->next; delete q; } } // 按序号依次输出英语成绩表中的元素 void ScoreLink::PrintList() { Escore *p = first->next; while (p != NULL) { cout << "学生姓名:" << p->name << " 学号:" << p->num << " 英语成绩:" << p->score << endl; p = p->next; } }
源码文件ScoreSeq_main.cpp
#include <iostream> using namespace std; #include "ScoreLink.h" void main() { Escore a[3],temp; int i; a[0].name = "Zhangsan"; a[0].num = "201311672299"; a[0].score = 99; a[1].name = "Lisi"; a[1].num = "201311672298"; a[1].score = 98; a[2].name = "Wangwu"; a[2].num = "201311672297"; a[2].score = 97; ScoreLink L(a, 3); //使用有参构造函数初始化一个长度为3的英语成绩表 cout << "执行输入操作前英语成绩表为:" << endl; L.PrintList(); cout << "请输入学生的姓名 学号 英语成绩" << endl; //输入操作 cin >> temp.name >> temp.num >> temp.score; L.Input(temp); cout << "执行输入操作后英语成绩表为:" << endl; //验证输入操作 L.PrintList(); cout << "请输入需要查找的学生的姓名:" << endl; //按值查找 cin >> temp.name; cout << "该学生的序号为:" << L.LocateName(temp.name) << endl; cout << "请输入需要查找学生的学号" << endl; cin >> temp.num; cout << "该学生的序号为:" << L.LocateNum(temp.num) << endl; cout << "请输入需要查找学生的成绩" << endl; cin >> temp.score; cout << "该学生的序号为:" << L.LocateScore(temp.score) << endl; cout << "请输入需要查找的学生的序号" << endl; //按位查找 cin >> i; cout << "该生的姓名:" << L.Get(i).name << " 该生的学号:" << L.Get(i).num << " 该生的英语成绩:" << L.Get(i).score << endl; cout << "请输入需要删除的学生信息的序号" << endl; //删除操作 cin >> i; cout << "删除前的成绩表为" << endl; //验证删除操作 L.PrintList(); L.Delete(i); cout << "删除后的成绩表为" << endl; L.PrintList(); }
三、运行结果
相关文章推荐
- 数据结构 第二章 线性表 英语成绩表的顺序表实现
- 数据结构编程笔记六:第二章 线性表 双向循环链表的实现
- 数据结构 第二章 线性表(1)顺序线性表的实现
- 《数据结构》严蔚敏版(java解)——第二章 线性表05 双端链表操作
- 数据结构——学生成绩管理系统的链表实现
- <数据结构> 第二章 线性表之循环链表的代码粗实现
- 数据结构编程笔记四:第二章 线性表 单链表的实现
- 数据结构线性表——链表实现
- 数据结构学习---线性表链表实现
- 数据结构_线性表_链表实现
- 数据结构 第二章 线性表(4)单链表的实现
- 数据结构学习-线性表-链表的代码实现
- (2)数据结构——线性表(链表)实现
- 数据结构学习---线性表链表实现
- 数据结构编程笔记七:第二章 线性表 一元多项式程序的实现
- 数据结构_线性表_链表实现
- 数据结构编程笔记五:第二章 线性表 静态链表的实现
- 数据结构 严蔚敏 清华大学出版社 第二章 抽象数据类型 链表的实现 成功编译并运行
- 【数据结构】线性表(链表实现)
- 数据结构第二章--线性表链表