实验2.5 运用间接寻址实现对数据的基本操作
来源:互联网 发布:yellow submarine 知乎 编辑:程序博客网 时间:2024/06/16 02:27
一、实验目的
巩固线性表的数据结构的存储方法和相关操作,
学会针对具体应用,
使用线性表的相关知识来解决具体问题。
二、实验内容
建立一个由n个学生成绩的顺序表,
n的大小由自己确定,
每一个学生的成绩信息由自己确定,
实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三 、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
2、相关操作的算法表达;
3、完整程序;4、总结、运行结果和分析。
5、总体收获和不足,疑问等。
四、实验算法(参考书本第45页)
1、采用C++的模板机制
const int MaxSize=100;template<class DataType>struct Node{DataType data;}; template<class DataType> class indirectaddressLink { public: indirectaddressLink(DataType a[],int n);~indirectaddressLink(){}; void Insert(int i,int x); int Locate(DataType x); DataType Delete(int i); void PrintList(); private: Node<DataType>*address[MaxSize];int length; };
2、新建indirectaddressLink类声明
template<class DataType> indirectaddressLink<DataType>::indirectaddressLink(DataType a[],int n) { for(int i=0;i<n;i++) { address[i]=new Node<DataType>; address[i]->data=a[i]; } length=n; }
3、插入
template<class DataType>void indirectaddressLink<DataType>::Insert(int i,int x){if(i<=length&&i>0){for(int j=length;j>=i;j--){address[j]=address[j-1];}address[i-1]->data=x;length++;}else{throw"位置";} }
4、删除
template<class DataType>DataType indirectaddressLink<DataType>::Delete(int i){if(i<=length&&i>=0){int x=address[i-1]->data;for(int j=i;j<length;j++){address[j-1]=address[j];}length--;return x;}else{throw"位置";}}
5、定义
template<class DataType> int indirectaddressLink<DataType>::Locate(DataType x) { int i=0; for(i;i<length;i++) { if(address[i]->data==x) {return i+1;} } return 0; } template<class DataType> void indirectaddressLink<DataType>::PrintList() { for(int i=0;i<length;i++) { cout<<address[i]->data<<endl; } }
6、主函数
int main() { int r[5]={87,68,74,90,80}; indirectaddressLink<int>L(r,5); cout<<"执行插入成绩操作前数据为:"<<endl; L.PrintList(); try { L.Insert(2,70); } catch(char*s) { cout<<s<<endl; } cout<<"执行插入成绩操作后数据为:"<<endl; L.PrintList(); cout<<"值为74的元素位置为:"; cout<<L.Locate(74)<<endl; cout<<"执行删除第一个学生成绩操作前数据为:"<<endl; L.PrintList(); try { L.Delete(1); } catch(char*s) { cout<<s<<endl; } cout<<"执行删除成绩操作后数据为:"<<endl; L.PrintList(); return 0; }
五、实验代码
#include<iostream> #include<string> using namespace std;const int MaxSize=100;template<class DataType>struct Node{DataType data;}; template<class DataType> class indirectaddressLink { public: indirectaddressLink(DataType a[],int n);~indirectaddressLink(){}; void Insert(int i,int x); int Locate(DataType x); DataType Delete(int i); void PrintList(); private: Node<DataType>*address[MaxSize];int length; }; template<class DataType> indirectaddressLink<DataType>::indirectaddressLink(DataType a[],int n) { for(int i=0;i<n;i++) { address[i]=new Node<DataType>; address[i]->data=a[i]; } length=n; }template<class DataType>void indirectaddressLink<DataType>::Insert(int i,int x){if(i<=length&&i>0){for(int j=length;j>=i;j--){address[j]=address[j-1];}address[i-1]->data=x;length++;}else{throw"位置";} } template<class DataType>DataType indirectaddressLink<DataType>::Delete(int i){if(i<=length&&i>=0){int x=address[i-1]->data;for(int j=i;j<length;j++){address[j-1]=address[j];}length--;return x;}else{throw"位置";}} template<class DataType> int indirectaddressLink<DataType>::Locate(DataType x) { int i=0; for(i;i<length;i++) { if(address[i]->data==x) {return i+1;} } return 0; } template<class DataType> void indirectaddressLink<DataType>::PrintList() { for(int i=0;i<length;i++) { cout<<address[i]->data<<endl; } } int main() { int r[5]={87,68,74,90,80}; indirectaddressLink<int>L(r,5); cout<<"执行插入成绩操作前数据为:"<<endl; L.PrintList(); try { L.Insert(2,70); } catch(char*s) { cout<<s<<endl; } cout<<"执行插入成绩操作后数据为:"<<endl; L.PrintList(); cout<<"值为74的元素位置为:"; cout<<L.Locate(74)<<endl; cout<<"执行删除第一个学生成绩操作前数据为:"<<endl; L.PrintList(); try { L.Delete(1); } catch(char*s) { cout<<s<<endl; } cout<<"执行删除成绩操作后数据为:"<<endl; L.PrintList(); return 0; }
六、实验运行结果
七、实验总结和心得
间接寻址是将数组和指针结合起来的一种方法,它将数组中存储数据元素的单元改为存储指向该元素的指针。
实验中删除操作和插入操作其实是类似的。虽然调试了出来,
可是发现实验结果中原本的数字“68”变成了需要插入的数字“70”。
对于这个错误,暂时找不到原因。
阅读全文
0 0
- 实验2.5 运用间接寻址实现对数据的基本操作
- 间接寻址的基本操作实现
- 实验2.2 运用单链表实现对数据的基本操作
- 实验2.3 运用双链表实现对数据的基本操作
- 实验2.5 间接寻址实现成绩管理——基础操作的实现
- 间接寻址储存的线性表—基本操作实现
- 实验2.4 运用静态链表实现对数据的基本操作
- 间接寻址的实现
- 间接寻址的基本及其应用(实验2.4)
- 间接寻址的基本及其应用(实验2.4)
- 算法复习--------------基本算法:间接寻址的实现
- 实验二 间接寻址实现学生成绩
- 数据结构|创建学生成绩的间接寻址(实验2.5)
- 数据结构|创建学生成绩的间接寻址(实验2.5)
- C++实现的间接寻址
- 实验二间接寻址
- 操作数的寻址方式(寄存器间接,基址寻址,间址寻址,比例间接寻址)
- 间接寻址--简单操作
- 银行家算法
- 左右为难
- 客户端架构
- VS2008下Qt4编译MySQL驱动
- 微信抢票实战总结
- 实验2.5 运用间接寻址实现对数据的基本操作
- Linux下修改^M换行符
- 1068. 万绿丛中一点红(20)
- Win10系统中使用VS2017编译Boost1.65的方法
- 机器学习-时间序列问题的特征工程
- python图形界面GUI编程之wxpython安装
- 12-面向对象(继承-子父类中成员函数特点-覆盖) 13-面向对象(继承-子父类中成员函数特点-覆盖的应用
- C++ 实现 发送HTTP Get/Post请求
- spring-boot的缓存