间接寻址的基本操作实现

来源:互联网 发布:直播看电视的软件 编辑:程序博客网 时间:2024/05/30 02:25

一.实验目的

     巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。

 

.实验内容

1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。



三.源代码

#include <iostream>using namespace std;const int MaxSize=100;template<class DataType>struct Node{DataType data;}; //以下是类indirectaddressLink的声明 template<class DataType> class indirectaddressLink { public: indirectaddressLink(); indirectaddressLink(DataType a[],int n); ~indirectaddressLink(){}; int Locate(DataType x); void Insert(int i,DataType x); DataType Delete(int i); void PrintList(); private: Node<DataType>*address[MaxSize]; int length; }; //以下为类StaticLinkList的成员函数定义 template<class DataType> indirectaddressLink<DataType>::indirectaddressLink() { for(int i=0;i<MaxSize;i++)   address[i]=NULL;   length=0;   }  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,DataType 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 count;  for(count;count<length;count++)  {    if(address[count]->data==x){  return count+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();  } 


 四.实验截图



五.实验心得
通过这次实验,我基本掌握了间接寻址的操作。由于间接寻址是将数组和指针结合起来的一种方法,它将数组中存储数据元素的单元改为存储指向该元素的指针,所以间接寻址表的结点的定义,与插入、删除的相关操作都需要与之前的其他链表操作有不同。我通过仔细研究书上的相关知识点,并向相关同学询问一些问题,最后调试并运行成功出了程序。希望自己能够认真学习,继续努力。


原创粉丝点击