实验2.2 单链表实现成绩管理——基础操作的实现
2017-10-17 18:41
429 查看
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三.源代码
五、实验心得
1、单链表使用两个构造函数,一个无参,一个有参,无参用于生成头指针的空链表,有参的用于生成N个结点的单链表;
2、单链表各功能的时间复杂度;
3、由于第一次尝试使用单链表完成一个成绩管理的实现,我运用了最基本的函数去尝试运用,在最简单的函数中了解单链表的使用及其知识点;
4、虽然是最基本的功能实现,我依旧在运行中出现了比较繁琐的问题,如指针的使用,结点的运用等,查阅书籍后仍然有很多不了解的地方,之后通过网络去寻找问题所在,去了解其知识点,才明白该如何应用,了解到实践让知识更加巩固。
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三.源代码
#include <iostream> using namespace std; template <class DataType> struct Node { DataType data; Node<DataType> *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; //工作指针p和累加器count初始化 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->next = p->next; p->next = s; } } template <class DataType> LinkList <DataType>::LinkList() { first = new Node<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; p = first; int count = 0; while (p != NULL&&count < i - 1) { p=p->next; count++; } if (p == NULL || p->next == NULL) throw "位置"; else { Node<DataType>*q = NULL; q = p->next; DataType x = q->data; p->next = q->next; delete q; 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、单链表使用两个构造函数,一个无参,一个有参,无参用于生成头指针的空链表,有参的用于生成N个结点的单链表;
2、单链表各功能的时间复杂度;
3、由于第一次尝试使用单链表完成一个成绩管理的实现,我运用了最基本的函数去尝试运用,在最简单的函数中了解单链表的使用及其知识点;
4、虽然是最基本的功能实现,我依旧在运行中出现了比较繁琐的问题,如指针的使用,结点的运用等,查阅书籍后仍然有很多不了解的地方,之后通过网络去寻找问题所在,去了解其知识点,才明白该如何应用,了解到实践让知识更加巩固。
相关文章推荐
- 实验2.5 间接寻址实现成绩管理——基础操作的实现
- 实验2.3 双链表实现成绩管理——基础操作的实现
- 实验2.2 单链表实现学生成绩管理
- 实验2.2 运用单链表实现对数据的基本操作
- 单链表的基础操作java实现
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 单链表基础操作C++实现
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 实验二:单链表实现N个学生成绩操作
- 单链表基础操作C++实现
- 单链表基础操作C++实现
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 单链表基础操作C++实现
- 单链表基础操作C++实现
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 单链表基础操作的Java实现
- 单链表基础操作C++实现
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 单链表基础操作C++实现