线性表综合实验(双链表)
来源:互联网 发布:淘宝助手历史版本下载 编辑:程序博客网 时间:2024/06/06 16:27
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二. 实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
源代码:
#include <iostream> #include<string> using namespace std; struct Student { string name; int Chinese; int Math; int English; int Sum; }; ostream& operator << (ostream& os, const Student &ob) { os << ob.name << "\t"; os << ob.Chinese << "\t"; os << ob.Math << "\t"; os << ob.English << "\t"; os << ob.Sum << "\t"; return os; } template <class DataType> struct Node { DataType data; Node<DataType> *prior, *next; }; template <class DataType> class DoubleLink { public: DoubleLink(); DoubleLink(DataType a[], int n); ~DoubleLink(); int Length(); DataType Get(int i); int Locate(string x); void Insert(DataType x, int i); DataType Delete(int i); void PrintList(); private: Node<DataType> * first; // 定义头指针 Node<DataType> * last; // 定义尾指针 int length; }; template <class DataType> void DoubleLink<DataType> ::PrintList() { Node<DataType>*p; p = first->next; //工作指针P初始化 cout << "-------------------------------------" << endl; cout << "姓名" << "\t" << "语文" << "\t" << "数学" << "\t" << "英语" << "\t" << "总分" << "\t" << endl; for (int i = 0; i < length; i++) { cout << p->data << endl; p = p->next; } cout << "-------------------------------------" << endl; } template <class DataType> int DoubleLink<DataType>::Length() { return length; } template <class DataType> DataType DoubleLink<DataType>::Get(int i) { Node<DataType>*p = NULL; p = first->next; int count = 1; while (p != NULL&&count<i) { p = p->next; count++; } if (p == first) throw"输入位置异常"; else { return p->data; } } template <class DataType> int DoubleLink<DataType>::Locate(string x) { Node<Student>*p = NULL; p = first->next; int count = 1; while (p != first) { if (p->data.name == x) return count; p = p->next; count++; } return 0; } template <class DataType> void DoubleLink<DataType>::Insert(DataType x, int i) { Node<DataType>*p, *s; p = first->next; int count = 1; while (p != first && count < i - 1) { p = p->next; count++; } if (p == first)throw "插入位置异常"; else { s = new Node<DataType>; s->data = x; s->prior = p; s->next = p->next; (p->next)->prior = s; p->next = s; s->data.Sum = s->data.Chinese + s->data.Math + s->data.English; length++; } } template <class DataType> DoubleLink <DataType>::DoubleLink() { first = new Node<DataType>; first->next = first; length = 0; } template <class DataType> DoubleLink<DataType>::DoubleLink(DataType a[], int n) //尾插法 { Node<DataType> *s; //s为工作指针 first = new Node<DataType>; first->prior = last; last = first; //尾指针初始化 for (int i = 0; i < n; i++) { s = new Node<DataType>; //为每个数组元素建立一个结点 s->data = a[i]; s->prior = last; last->next = s; //将结点s插入到终端结点之后 last = s; length++; } last->next = first; //链接建立完毕,将终端结点的指针域指向头指针 } template <class DataType> DataType DoubleLink<DataType>::Delete(int i) { Node<DataType>*p; //工作指针初始化 p = first->next; int count = 0; while (p != first&&count < i - 1) { p = p->next; count++; } if (p == first || p->next == NULL) throw "删除位置异常"; else { DataType x = p->data; (p->prior)->next = p->next; (p->next)->prior = p->prior; delete p; length--; return x; } } template <class DataType> DoubleLink <DataType>::~DoubleLink() { Node<DataType>*p = first; //工作结点p初始化 for (int i = 0; i < length; i++) { p = first; first = first->next; delete p; } length = 0; cout << "链表已成功删除。" << endl; } int main() { Student stu[100]; //最大容纳量 int num; string TempName; cout << "请输入学生人数:"; cin >> num; for (int i = 0; i < num; i++) { cout << "输入“break”退出输入" << endl; cout << "请输入第" << i + 1 << "名学生姓名:"; cin >> TempName; if (TempName == "break") { num = i; break; } stu[i].name = TempName; cout << "请输入第" << i + 1 << "名学生语文成绩:"; cin >> stu[i].Chinese; cout << "请输入第" << i + 1 << "名学生数学成绩:"; cin >> stu[i].Math; cout << "请输入第" << i + 1 << "名学生英语成绩:"; cin >> stu[i].English; stu[i].Sum = stu[i].Chinese + stu[i].Math + stu[i].English; cout << "-------------------------------------" << endl; } DoubleLink<Student> demo(stu, num); demo.PrintList(); cout << "链表总长为:"; cout << demo.Length()<<endl; cout << "-------------------------------------" << endl; cout << "查找第三名学生成绩:" << endl; cout << "-------------------------------------" << endl; cout << "姓名" << "\t" << "语文" << "\t" << "数学" << "\t" << "英语" << "\t" << "总分" << "\t" << endl; cout << demo.Get(3) << endl; cout << "-------------------------------------" << endl; cout << "查找姓名为“霜降”的位置:" << demo.Locate("霜降") << endl; cout << "-------------------------------------" << endl; cout << "在第三与第四间插入“秋分”同学的成绩" << endl; demo.Insert({ "秋分",95,86,93}, 5); demo.PrintList(); cout << "链表总长为:"; cout << demo.Length()<<endl; cout << "-------------------------------------" << endl; cout << "删除第2位同学的成绩" << endl; demo.Delete(2); demo.PrintList(); return 0; }
阅读全文
0 0
- 线性表综合实验(双链表)
- 线性表综合实验--双链表
- 实验二 线性表综合实验(双链表)
- 实验二线性表综合实验-双链表
- 线性表综合实验——双链表
- 实验二 线性表综合实验之双链表
- 实验二 线性表综合实验之《双链表》
- 实验二 线性表综合实验——双链表
- 数据结构:实验二线性表综合实验③双链表
- 实验二 线性表综合实验之《双链表》
- 实验二 线性表综合实验(循环链表)
- 实验二 线性表综合实验(静态链表)
- 实验二 线性表综合实验(单链表)
- 实验二 线性表的综合实验(c++)
- 实验二 线性表的综合实验(c++)
- 实验二 线性表综合实验(间接寻址)
- 实验二 线性表的综合实验(c++)
- 实验二 线性表 综合实验(c++)
- ImageLoader 图片请求框架的使用
- 【UVA1352】Colored Cubes
- Spring学习教程-基础
- Filter实际应用--检查用户是否登录的过滤器
- git 修改提交邮箱以及用户名-亲测
- 线性表综合实验(双链表)
- 全栈必备 敏捷估点
- JS TypeScript 基础篇
- PAT乙级题1010.一元多项式求导
- ls命令
- “FCoE全解系列”之增强型以太网技术
- Maven项目pom.xml中Multiple annotations found at this line问题
- 时间复杂度和空间复杂度
- 折叠面板,类似于二级目录的效果,纯css编写