实验二(2)用单链表实现信息操作
来源:互联网 发布:栗山千明知乎 编辑:程序博客网 时间:2024/06/05 19:27
一、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二、实验时间
准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三、实验内容
建立一个由n个学生信息的单链表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
四、代码实现
1、Linklist.h
//Linklist.h#pragma oncetemplate<class DataType>struct Node //用结构体定义节点{DataType data;Node<DataType> *next;};template<class DataType>class Slinklist { //定义单链表类模板public:Slinklist();Slinklist(DataType a[], int n);~Slinklist();int Length();void Get(int n);int Locate(char a[]);void Insert(int i, DataType x);DataType Delete(int i);void Printlist();private:Node<DataType> *first;};struct Student //定义学生信息结构体数组{char name[5];char sno[14];char sex[4];char age[4];char Class[12];};
2、各功能函数实现:Linklist.cpp
//Linklist.cpp#include"Linklist.h"#include<iostream>using namespace std;template<class DataType>Slinklist<DataType>::Slinklist() //无参构造函数定义{first = new Node<DataType>; //生成头节点first->next = NULL; //头节点的指针域置空}template<class DataType>Slinklist<DataType>::Slinklist(DataType a[], int n) //有参构造函数定义,用头插法建立单链表{first = new Node<DataType>; first->next = NULL;for (int i = 0; i < n; i++){Node<DataType> *s;s = new Node<DataType>; s->data = a[i];s->next = first->next; first->next = s;}}template<class DataType>int Slinklist<DataType>::Length() //计算单链表长度{p = new Node<DataType>;p = first->next; count = 0;while (p != NULL){p = p->next;count++;}return count;}template<class DataType>void Slinklist<DataType>::Get(int i) //查找在第i位的学生信息{Node<DataType> *p;p = first->next; int count = 0;while(p->data.name != NULL&&count < i - 1){p = p->next;count++;}if (p->data.name == NULL)throw"位置";else cout << p->data.name << " " << p->data.sno << " " << p->data.sex << " " << p->data.age << " " << p->data.Class << endl;}template<class DataType>int Slinklist<DataType>::Locate(char a[]) //查找学生信息,返回学生所在位置{Node<DataType> *p;p = new Node<DataType>;p = first->next; int count = 1;while (p->data.name != NULL){if ((string)p->data.name == (string)a)return count;p = p->next;count++;}return 0;}template<class DataType>void Slinklist<DataType>::Insert(int i, DataType x) //从第i位插入学生信息{Node<DataType> *p;p = new Node<DataType>;p = first; int count = 0;while (p->data.name != NULL&&count < i - 1){p = p->next;count++;}if (p->data.name == NULL)throw"位置";else {Node<DataType> *s;s = new Node<DataType>; s->data = x;s->next = p->next; p->next = s;}}template<class DataType>DataType Slinklist<DataType>::Delete(int i) //删除第i位学生信息{Node<DataType> *p;p = new Node<DataType>;p = first; int count = 1;while (p->data.name != NULL&&count < i){p = p->next;count++;}if (p->data.name == NULL||p->data.name == NULL )throw"位置";else {Node<DataType> *q;q = new Node<DataType>;q = p->next; DataType x = q->data;p->next = q->next;delete q;return x;}}template<class DataType>void Slinklist<DataType>::Printlist() //单链表遍历信息{Node<DataType> *p;p = new Node<DataType>;p = first->next;while (p != NULL){cout << p->data.name << " " << p->data.sno << " " << p->data.sex << " " << p->data.age << " " << p->data.Class << endl;p = p->next;}cout << endl;}template<class DataType>Slinklist<DataType>::~Slinklist() //析构函数{while (first != NULL){Node<DataType> *q;q = new Node<DataType>;q = first;first = first->next;delete q;}}
3、主程序对信息进行基本操作:linklistmain.cpp
//linklistmain.cpp#include"Linklist.cpp"#include<iostream>using namespace std;int main(){Student student[5] = { { "小波","201611671119","男","20","信管1161" },{ "小明","201611671114","男","19","信管1161" },{ "小红","201611671121","女","18","信管1161" },{ "小芳","201611671127","女","17","信管1161" },{ "小李","201611671125","男","18","信管1161" } };Slinklist<Student>score(student, 5);cout << ">>>显示所有学生信息:" << endl;score.Printlist();cout << ">>>将“小刚”的信息插入第二位后显示所有学生信息:" << endl;score.Insert(2, { "小刚","201611671101","男","15","信管1161" });score.Printlist();cout << ">>>获取第三位学生的信息:"<<endl;score.Get(3) ;cout << ">>>查找学生“小明”信息所在的位置:" << endl;cout << score.Locate("小明") << endl;cout << ">>>删除数据前所有学生数据:" << endl;score.Printlist();score.Delete(2);cout << ">>>删除第二位学生数据后所有学生数据:" << endl;score.Printlist();return 0;}
五、运行结果如下:
六、总结
在能够完成基本操作的同时对操作数据稍微复杂化了一点。
阅读全文
0 0
- 实验二(2)用单链表实现信息操作
- 数据结构实验二 链式存储结构----单向链表的有关操作(学生成绩信息C语言)
- 实验七 二叉树操作(二)
- 实验二(3)用循环双链表实现对数据的基本操作
- 实验二:顺序表实现N个学生成绩操作
- 实验二:单链表实现N个学生成绩操作
- 实验二 单链表实现
- 【数据结构实验】实验二 顺序表的基本操作的实现
- 实验二:CDP命令操作
- linux实验报告二--文件操作(续)
- 数据库概论(实验二)数据库与表的操作
- 第十八周实验报告(二):二维数组的操作
- FILE实验操作之MP3信息提取
- 信息安全技术实验二网络扫描实验+ARP攻击
- 实验二 单链表的实现
- 实验二:单链表的实现
- 实验二 线性表综合实验 (2)
- 【计算机网络实验二】crc编码(c++)实现
- stack-structured algorithm and queue-structured algorithm
- JAVA网络编程入门
- 单链表的实现(给定某结点,删除它;给定某结点,在他前面插入一个结点等)
- python os.path模块常用方法
- FileProvider的Server和Client
- 实验二(2)用单链表实现信息操作
- SVProgressHUD(2.0.3)原来是这样
- A few useful things to learn about ML
- 游戏设计之我见 —— Strike Vector EX游玩心得以及思考
- Qt 学习之路 2(62):保存 XML
- c++知识点---类模板的使用
- spring data 常用的几种CURD方法
- 纪念人生中第一篇博客
- 2017年9月份知识点记录总结