实验2.3 双链表实现成绩管理——基础操作的实现
来源:互联网 发布:淘宝logo设计哪家好 编辑:程序博客网 时间:2024/06/06 00:06
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三.源代码
#include <iostream> using namespace std; template <class DataType> struct Node { DataType data; Node<DataType> *prior,*next; }; template <class DataType> class LinkList { public: LinkList(); LinkList(DataType a[], int n); ~LinkList(); int Length(); DataType Get(int i); int Locate(DataType x); void Insert(DataType x, int i); DataType Delete(int i); void PrintList(); private: Node<DataType> * first; }; template <class DataType> void LinkList<DataType> ::PrintList() { Node<DataType>*p=NULL; p = first->next; //工作指针P初始化 cout << "【 "; while (p != NULL) { cout << p->data<<" "; p = p->next; } cout << "】"<<endl; } template <class DataType> int LinkList<DataType>::Length() { Node<DataType>*p = NULL; p = first->next; int count = 0; while (p != NULL) { p = p->next; count++; } return count; } template <class DataType> DataType LinkList<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 == NULL) throw"位置"; else { return p->data; } } template <class DataType> int LinkList<DataType>::Locate(DataType x) { Node<DataType>*p = NULL; p = first->next; int count = 1; while (p != NULL) { if (p->data == x) return count; p = p->next; count++; } return 0; } template <class DataType> void LinkList<DataType>::Insert(DataType x, int i) { Node<DataType>*p,*s; p = first; int count = 0; while (p != NULL && count < i - 1) { p = p->next; count++; } if (p == NULL)throw "位置"; else { s = new Node<DataType>; s->data = x; s->prior =p; s->next = p->next; p->next->prior=s; p->next = s; } } template <class DataType> LinkList <DataType>::LinkList() { first = new DulNode<DataType>; first->next = NULL; } template <class DataType> LinkList<DataType>::LinkList(DataType a[], int n) { Node<DataType> *s, *r; first = new Node<DataType>; r = first; for (int i = 0; i < n; i++) { s = new Node<DataType>; s->data = a[i]; r->next = s; r= s; } r->next = NULL; } template <class DataType> DataType LinkList<DataType>::Delete(int i) { Node<DataType> *p,*q; int x; p=first; p = first; while (i-- > 1) p= p->next; if(p==NULL||p->next==NULL) throw"位置"; else{ q = p->next; x=q->data; if (p->next != NULL){ if(q->next!=NULL) q->next->prior = p; else{ p->next=NULL; p->next = q->next; delete q; q = NULL; return x; } } p->next = q->next; delete q; q = NULL; return x; }} template <class DataType> LinkList <DataType>::~LinkList() { Node<DataType>*q = NULL; while (first != NULL) { q = first; first = first->next; delete q; } cout << "链表已成功删除。" <<endl; } int main() { int num; cout << "请输入学生人数:"; cin >> num; int studemo[] = { 50,68,70,80,90,78,88,49 }; LinkList<int> demo(studemo, num); demo.PrintList(); //展示学生成绩 cout << "--------------------" << endl; cout << "查找位置为三的学生成绩:" << demo.Get(3) << endl; cout << "--------------------" << endl; cout << "查找成绩为80的学生的位置:" << demo.Locate(80) << endl; cout << "--------------------" << endl; cout << "在第四与第五之间插入成绩85:"<<endl; cout << "结果为:"; demo.Insert(85, 5); demo.PrintList(); cout << "--------------------" << endl; cout << "链表总长为:"; cout << demo.Length() << endl; cout << "--------------------" << endl; cout << "删除第3位成绩:"; cout << demo.Delete(3)<<endl; cout << "结果为:"; demo.PrintList(); cout << "--------------------" << endl; cout << "析构链表"<<endl; demo.~LinkList(); return 0; }
四.结果截图
五、实验心得
1、 双链表是一种对称结构,使得在结点P的之前之后执行插入和删除操作都相对容易;
2、双链表基本操作与单链表相同,不同的有插入与删除;
3、虽然是最基本的功能实现,我依旧在运行中出现了比较繁琐的问题,如指针的使用,结点的运用等,查阅书籍后仍然有很多不了解的地方,之后通过网络去寻找问题所在,去了解其知识点,才明白该如何应用,了解到实践让知识更加巩固
4、本双链表是由前一单链表修改而成,但是在修改过程后,即使没有出现error,但是在执行删除功能时一直出现自我终止的结果,进行独自修改很久,依旧不能解决问题,最后询问了同学,发现有同学出现过相同的问题,向他讨教询问,发现问题所在,最后才能完整得实现功能。
阅读全文
0 0
- 实验2.3 双链表实现成绩管理——基础操作的实现
- 实验2.2 单链表实现成绩管理——基础操作的实现
- 实验2.5 间接寻址实现成绩管理——基础操作的实现
- 实验2.2 单链表实现学生成绩管理
- 实验2.1 顺序表实现成绩管理
- 实验二 双链表实现学生成绩
- 实验2.4 静态链表实现成绩管理
- 实验二:顺序表实现N个学生成绩操作
- 实验二:单链表实现N个学生成绩操作
- 学员成绩管理的简单C实现
- 实验2.3 运用双链表实现对数据的基本操作
- c 实现学生成绩管理
- 学生成绩管理C实现
- 用单链表实现学生成绩管理
- 单链表实现学生成绩操作
- 实验二 单链表实现学生成绩
- 实验二 顺序表实现学生成绩
- 实验二 间接寻址实现学生成绩
- C#.NET常见问题(FAQ)-找不到类型或命名空间名称“ManagementBaseObject”怎么办
- [数据结构]循环链表(c++/类模板)用例JosephRing
- C#.NET常见问题(FAQ)-程序不包含适合于入口点的静态“Main”方法怎么办
- 虹膜识别源代码下载,分别基于MATLAB、C++、OpenCV
- C#.NET常见问题(FAQ)-Visual Studio VS如何显示行号
- 实验2.3 双链表实现成绩管理——基础操作的实现
- C#.NET常见问题(FAQ)-程序如何把窗体文件从从一个项目中复制到另一个项目
- C#.NET常见问题(FAQ)-程序如何单步调试和设置断点
- C#.NET常见问题(FAQ)-如何把写好的类编译成dll文件
- C#.NET常见问题(FAQ)-如何把资源嵌入到项目中
- C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件
- C#.NET常见问题(FAQ)-想要另存一个项目,sln文件丢了怎么办,如何打开高版本的项目
- java的静态方法main()主函数
- C#.NET常见问题(FAQ)-如何批量增加或取消注释