<数据结构> 实验二 线性表的实验之一
来源:互联网 发布:js改变input的宽度 编辑:程序博客网 时间:2024/06/06 03:12
《数据结构》实验二: 线性表实验
一..实验目的
巩固线性表的数据结构,学会线性表的应用。
1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。
2.学习运用线性表的知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二..实验内容
1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
顺序表
//seq_scores.h#ifndef SCORES_H_#define SCORES_H_#include <iostream>#include <iomanip>using namespace std;const int MaxSize = 40;template <typename T>class Scores{private:T m_Data[MaxSize];int m_length;public:Scores();void m_Init(); //输入n个学生数据void m_Insert(); //在表中s的位置插入xvoid m_Find_Loc(); //在表中查找序号为i的元素void m_Find_Val(); //在表中查找值与x相等的元素void m_Del(); //在表中删除序号为s的元素void m_Show(); //把表中所有元素打印出来void m_Ave(); //求表中所有元素的平均值int Get_length(); //获取成绩表的长度void m_Seq(); //把表中所有元素按从小到大排序};#endiftemplate <typename T>Scores<T>::Scores(){m_length = 0;}template <typename T>void Scores<T>::m_Init(){cout << "\n输入操作" << endl;int n;cout << "\n成绩表还有" << MaxSize - m_length << "空位可供输入\n" << endl;cout << "\n请设定你要输入数据的数目:";cin >> n;while (n > MaxSize - m_length){cout << "\n抱歉!你要输入数据的数目大于成绩表剩余的空位.请重新输入一个正确的数目" << endl;cin >> n;}for (int i = 0; i < n; i++){cout << "\n第" << i + 1 << "个同学的成绩为:";cin >> m_Data[i];m_length++;}cout << "数据输入完毕.\n" << endl;this->m_Show();system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Insert() //在序号为s的位置插入元素x{cout << "\n插入操作\n" << endl;this->m_Show();int s;T x;cout << "\n请输入你想要元素插入的位置序号:";cin >> s;cout << "\n请输入你要插入的学生成绩:";cin >> x;while (s > m_length + 1){cout << "\n插入位置有错." << endl;cout << "请重新插入输入的位置序号:";cin >> s;}if (m_length >= MaxSize){cout << "\n抱歉!成绩表满了,无法再插入数据." << endl;return;}else{for (int i = m_length - 1; i > s - 2; i--){m_Data[i + 1] = m_Data[i];}}m_Data[s - 1] = x;m_length++;cout << "\n数据插入完毕." << endl;cout << "\n\n";this->m_Show();system("pause"); //暂停system("cls"); //清屏}template<typename T>void Scores<T>::m_Find_Loc() {cout << "\n按位查找操作\n" << endl;this->m_Show();if (m_length == 0){cout << "\n成绩表中没有数据,查询操作失败!!" << endl;return;}int i;cout << "\n请输入你要查找的成绩的序号:";cin >> i;while (i > MaxSize){cout << "\n你输入的序号大于成绩表的最大序号,请重新输入一个正确的序号:";cin >> i;}cout << "\n你查找的成绩为:" << m_Data[i - 1] << endl;system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Find_Val(){cout << "\n按值查找操作\n" << endl;this->m_Show();if (m_length == 0){cout << "成绩表中没有数据,查询操作失败!!" << endl;return;}bool t = false;T x;cout << "请输入一个学生成绩:";cin >> x;for (int i = 0; i < m_length; i++){if (x == m_Data[i]){cout << "\n你查找的成绩的序号为:" << i + 1 << endl;t = true;}}if (t == false)cout << "\n成绩表中没有该成绩." << endl;system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Del(){cout << "\n删除操作\n" << endl;this->m_Show();if (m_length == 0){cout << "成绩表中没有数据,删除操作失败!!" << endl;return;}int s;cout << "\n你输入你要删除的学生成绩的序号:";cin >> s;cout << "\n你删除的学生成绩为:" << m_Data[s] << endl;for (int i = s; i < m_length; i++){m_Data[i - 1] = m_Data[i];}cout << "\n该学生成绩删除完毕.\n" << endl;m_length--;this->m_Show();system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Ave(){cout << "\n求平均值操作\n" << endl;this->m_Show();T sum = 0, ave;if (m_length == 0){cout << "成绩表中没有数据,求平均数操作失败!!" << endl;return;}for (int i = 0; i < m_length; i++)sum += m_Data[i];ave = sum / m_length;cout << "学生成绩的平均值为:" << ave << endl;system("pause"); //暂停system("cls"); //清屏}template <typename T>int Scores<T>::Get_length(){return m_length;}template <typename T>void Scores<T>::m_Seq(){cout << "\n排序操作\n" << endl;this->m_Show();T t;for (int i = 1; i < m_length; i++)for (int j = 0; j < m_length - i; j++){if (m_Data[j] > m_Data[j + 1]){t = m_Data[j];m_Data[j] = m_Data[j + 1];m_Data[j + 1] = t;}}cout << "\n";this->m_Show();system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Show(){if (m_length == 0){cout << "成绩表中没有数据,显示操作失败!!" << endl;return;}cout << m_length << "名学生的成绩为:\n" << endl;for (int i = 0; i < m_length; i++){cout << m_Data[i] << '\t';}cout << "\n\n" << endl;}
//seq_main.cpp#include "seq_scores.h"#include <iostream>//#include <iomanip>using namespace std;int main(){Scores<int> sco;sco.m_Init();sco.m_Insert();sco.m_Find_Val();sco.m_Find_Loc();sco.m_Ave();sco.m_Seq();sco.m_Del();return 0;}
实验结果:
单链表
//link_scores.h#ifndef SCORES_H_#define SCORES_H_#include <iostream>#include <iomanip>using namespace std;template <typename T>struct Node{T data;Node<T> *next;};template <typename T>class Scores{private:int m_length;Node<T> *head;public:Scores();void m_Init(); //输入n个学生数据void m_Insert(); //在表中s的位置插入xvoid m_Find_Loc(); //在表中查找序号为i的元素void m_Find_Val(); //在表中查找值与x相等的元素void m_Del(); //在表中删除序号为s的元素void m_Destroy(); //删除成绩表void m_Show(); //把表中所有元素打印出来void m_Ave(); //求表中所有元素的平均值int Get_length(); //获取成绩表的长度void m_Seq(); //把表中所有元素按从小到大排序};#endiftemplate <typename T>Scores<T>::Scores(){head = new Node<T>;head->next = NULL;m_length = 0;}template <typename T>void Scores<T>::m_Init(){cout << "\n输入操作\n" << endl;int n = 0;Node<T> *p, *q;q = head;if (head->next != NULL)head->next = NULL;cout << "请设置你要输入的学生成绩的数目:";cin >> n;for (int i = 0; i < n; i++){p = new Node<T>;cout << "\n请输入第" << i + 1 << "位学生的成绩";cin >> p->data;q->next = p;q = p;q->next = NULL;m_length++;}cout << "\n学生成绩输入完毕." << endl;cout << "\n";this->m_Show();system("pause"); //暂停system("cls"); //清屏}template <typename T>void Scores<T>::m_Insert(){cout << "\n插入操作\n" << endl;this->m_Show();int s;Node<T> *p, *t;p = head;cout << "请输入你想要插入学生成绩的位置:";cin >> s;while (s <= 0 || s > m_length + 1){cout << "/n插入的位置不正确,请重新输入一个正确的位置:";cin >> s;}for (int i = 0; i < s - 1; i++)p = p->next;t = new Node<T>;cout << "\n请输入你想插入的学生成绩:";cin >> t->data;t->next = p->next;p->next = t;m_length++;cout << "\n成绩插入完毕." << endl;cout << "\n";this->m_Show();system("pause");system("cls");}template <typename T>void Scores<T>::m_Find_Loc(){cout << "\n按位查找操作\n" << endl;this->m_Show();int s;Node<T> *p;p = head;cout << "请输入你想要查找的学生成绩的位置:";cin >> s;while (s <= 0 || s > m_length){cout << "\n你输入的位置有误,请重新输入一个正确的位置:";cin >> s;}for (int i = 0; i < s; i++)p = p->next;cout << "\n你想要查找的成绩为:";cout << p->data << endl;cout << "查找完毕." << endl;system("pause");system("cls");}template <typename T>void Scores<T>::m_Find_Val(){cout << "\n按值查找操作\n" << endl;this->m_Show();bool t = false;int i = 1;Node<T> *p;p = head->next;T x;cout << "请输入想要查找的成绩:";cin >> x;while (p != NULL){if (x == p->data){cout << "\n你查找的成绩的位置为:" << i << endl;t = true;}p = p->next;i++;}if (t == false)cout << "\n没有符合条件的学生成绩." << endl;system("pause");system("cls");}template <typename T>void Scores<T>::m_Del(){cout << "\n删除操作\n" << endl;this->m_Show();int s;Node<T> *p, *q;p = head;cout << "请输入你想要删除的学生成绩的位置为:";cin >> s;while (s <= 0 || s > m_length){cout << "\n你输入的位置有误,请重新输入一个正确的位置:";cin >> s;}for (int i = 0; i < s - 1; i++)p = p->next;q = p->next;p->next = q->next;cout << "\n你删除的成绩为:";cout << q->data << endl;delete q;m_length--;cout << "\n删除完毕." << endl;cout << "\n";this->m_Show();system("pause");system("cls");}template <typename T>void Scores<T>::m_Destroy(){Node<T> *p, *q;p = head;q = p;for (int i = 0; i < m_length; i++){q = q->next;delete p;p = q;}m_length = 0;//cout << "\n成绩表清空完毕." << endl;}template <typename T>void Scores<T>::m_Ave(){cout << "\n求平均值操作\n" << endl;this->m_Show();T sum = 0, ave;Node<T> *p;p = head->next;if (p == NULL){cout << "\n成绩表里没有学生成绩,无法执行求平均值操作." << endl;return;}while (p != NULL){sum += p->data;p = p->next;}ave = sum / m_length;cout << "\n学生成绩的平均成绩为:" << ave << endl;cout << "\n";system("pause");system("cls");}template <typename T>void Scores<T>::m_Seq(){cout << "\n排序操作\n" << endl;this->m_Show(); Node<T> *p; T t;for (int i = 1; i < m_length; i++){p = head;while (p->next != NULL){if (p->data > p->next->data){t = p->data;p->data = p->next->data;p->next->data = t;}p = p->next;}}cout << "\n成绩表从小到大排序完毕." << endl;cout << "\n";this->m_Show();system("pause");system("cls");}template <typename T>void Scores<T>::m_Show(){if (head->next == NULL){cout << "\n成绩表里数据为空,显示操作失败!!";return;}Node<T> *p;p = head->next;cout << "\n成绩表中所有学生成绩为:" << endl;while (p != NULL){cout << p->data << setw(8);p = p->next;}cout << endl;cout << "\n\n";}
//link_main.cpp#include "link_scores.h"#include <iostream>using namespace std;int main(){Scores<int> sco;sco.m_Init();sco.m_Insert();sco.m_Find_Val();sco.m_Find_Loc();sco.m_Del();sco.m_Ave();sco.m_Seq();sco.m_Destroy();return 0;}
实验结果:
程序尚有不足,待补充待完善。
0 0
- <数据结构> 实验二 线性表的实验之一
- 《数据结构》实验二:线性表的实验
- 《数据结构》实验二 线性表的实验
- 《数据结构》实验二:线性表的实验
- 数据结构实验二 :线性表的实验
- 《数据结构》实验二 线性表的实验
- 《数据结构》实验二:线性表的实验
- 《数据结构》实验二:线性表的实验
- 数据结构实验二 :线性表的实验
- 数据结构实验二:线性表的实验
- 【实验报告】数据结构实验二:线性表的实验
- 《数据结构》实验二:线性表的实验(实验报告)
- <数据结构> 实验二 线性表的实验之二
- 《数据结构》实验二:线性表实验
- 《数据结构》实验二: 线性表实验
- 《数据结构》实验二:线性表实验
- 《数据结构》实验二:线性表实验(1)
- 数据结构实验二 线性表实验
- ubuntu 更改目录及其下的子目录和文件的访问权限
- ImageLoader 俩个比较坑的问题。
- admob xcode升级问题从早期版本升级到新版本出现的错误
- android中不同activity之间共享数据
- 第十九章 19.2.2节练习
- <数据结构> 实验二 线性表的实验之一
- [学习记录用][Win32 API]GetLastError错误码信息翻译工具编写
- android Dialog 自定义 继承Dialog基类
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
- Linux下短信猫安装使用
- 循环队列
- android DatePicker TimePicker
- java keytool使用
- Combinations