单链表的基本操作及其应用(实验2.1)
来源:互联网 发布:网络用语pt是什么意思 编辑:程序博客网 时间:2024/05/16 12:25
一.实验目的
巩固单链表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二. 实验内容
建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。用单链表来实现,分别输出结果。
为了以后的对代码的修改、优化和复用,这里采用了C++中的模板来实现,下面是模板的实现。
SingleLinkList.h
#ifndef SingleLinkList_h#define SingleLinkList_h#include <iostream>using namespace std;template<class DataType>struct Node { DataType data; Node<DataType> *next;};template<class DataType>class SingleLinkList {public: // 无参构造函数,建立只有头结点的空链表 SingleLinkList(); // 有参构造函数,建立有n个元素的单链表 SingleLinkList(DataType a[], int n); // 析构函数 ~SingleLinkList() {}; // 求单链表长度 int Length(); // 按位查找 DataType Get(int i); // 按值查找 int Locate(DataType x); // 插入操作 void Insert(int i, DataType x); // 删除操作 DataType Delete(int i); // 遍历操作 void PrintList();private: // 头指针 Node<DataType> *first;};#endif /* SingleLinkList_h */
SingleLinkList.cpp
#include "SingleLinkList.h"template<class DataType>SingleLinkList<DataType>::SingleLinkList(){ first = new Node<DataType>; first->next = NULL;}template<class DataType>// 尾插法SingleLinkList<DataType>::SingleLinkList(DataType a[], int n){ Node<DataType> *r, *s; 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; //将结点s插入到终端结点之后 } r -> next = NULL; //单链表建立完毕,将终端结点的指针域置空}template<class DataType>int SingleLinkList<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 SingleLinkList<DataType>::Get(int i){ Node<DataType> *p = first -> next; for (int count = 0; count < i; count++) { count++; p = p -> next; } if (p == NULL) throw("位置错误"); else return p -> data;}template<class DataType>int SingleLinkList<DataType>::Locate(DataType x){ Node<DataType> *p; 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 SingleLinkList<DataType>::Insert(int i, DataType x){ Node<DataType> *p = first; for (int k = 1; k <= i - 1; k++) { p = p -> next; } Node<DataType> *tempNode ; tempNode = new Node<DataType>; tempNode -> data = x; tempNode -> next = p -> next; p -> next = tempNode;}template<class DataType>DataType SingleLinkList<DataType>::Delete(int i){ DataType x; Node<DataType> *p; p = first; for (int k = 1; k < i; k++) { p = p -> next; } Node<DataType> *tempNode; tempNode = new Node<DataType>; tempNode = p -> next; x = tempNode -> data; p -> next= tempNode -> next; delete tempNode; return x;}template<class DataType>void SingleLinkList<DataType>::PrintList(){ Node<DataType> *p = NULL; p = first -> next; while (p != NULL) { cout << p -> data << " "; p = p -> next; } cout << endl;}
以上模板实现了单链表的基本结构,可以实现对数据的插入、删除、查找等基本功能。下面是用模板的应用~
main.cpp
#include <iostream>#include "SingleLinkList.cpp"int main(int argc, const char * argv[]) { float score[5] = {66.5, 81.5, 80, 95.5, 100}; SingleLinkList<float> list(score, 5); cout << "遍历学生分数" << endl; list.PrintList(); cout << "读取第三个学生的分数" << endl; cout << list.Get(3) << endl; cout << "在第二个位置插入学生分数 95" << endl; list.Insert(2, 95); list.PrintList(); cout << "80分在分数表中的位置为: " << list.Locate(80); cout << endl; cout << "该分数表长度为: " << list.Length() << endl; cout << "删除第3个分数" << endl; list.Delete(3); list.PrintList(); return 0;}
运行一下得到下面的输出
三. 总结和心得
通过上面的输出结果可以看出,用单链表已经实现了这个基本的数据操作。由于平日C++的代码敲得少,在敲代码的时候经常没转过弯来,需要多加练习。
传送门:http://www.jianshu.com/u/1bed5943be92
阅读全文
0 0
- 单链表的基本操作及其应用(实验2.1)
- 单链表的基本操作及其应用(实验2.1)
- 实验一线性表的基本操作实现及其应用
- 实验一 线性表的基本操作实现及其应用
- 顺序表的基本操作实现及其应用(实验1)
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一 线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一 线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一线性表的基本操作实现及其应用
- 实验一 线性表的基本操作实现及其应用
- 稀疏自编码器 栈式自编码器 深度学习预训练
- web前端_原生js_全选功能
- 自定义控件_View----实现点击更换随机数
- 用Construct 2制作游戏时的图层和人物设置
- 【笔试】不能用来修饰Interface的有( )
- 单链表的基本操作及其应用(实验2.1)
- php-fpm参数优化【适用于1G内存的VPS】
- Maven入门指南⑤:使用Nexus搭建Maven私服
- 20171008
- 【文档】三、Mysql Binlog事件类文件和类型
- spring源码分析-应用启动过程
- 汇编(三)
- 钟南山:大部分人不是老死、病死,而是..
- jsp中九个内置对象和作用域