线性表综合实验之间接寻址

#include<iostream>  
using namespace std;  
const int Max=100;  
template<typename T>  
struct Node  
{  
    T data;  
};  
template<typename T>  
class Indirectadd 
{  
private:  
    Node<T> *add[Max];   
    int length;    
public:  
    Indirectadd();  
    Indirectadd(T a[],int n);  
    ~Indirectadd();  
	int Length(){return length;}  
    T Number_get(int i);
    int Location_get(T x);  
    void Insert(int i,T x);  
    T Delete(int i);
    void Printlist(); 
};  
template<typename T>  
Indirectadd<T>::Indirectadd()  
{  
    for(int i=0;i<Max;i++)  
    add[i]=NULL;  
    length=0;  
}  
template<typename T>  
Indirectadd<T>::Indirectadd(T a[],int n)  
{  
    for(int i=0;i<n;i++)  
    {  
        add[i]=new Node<T>;  
        add[i]->data=a[i];  
    }  
    length=n;  
}  
template<class T>  
Indirectadd<T>::~Indirectadd()  
{  
    Node<T> *p;  
    for(int i=0;i<length;i++)  
    {  
        p=add[i];  
        add[i]=NULL;  
        delete p;  
    }  
    length=0;  
}  
template<typename T>  
T Indirectadd<T>::Number_get(int i)  
{  
    if(i>=length) throw"位置错误";  
    return add[i-1]->data;  
}  
template<typename T>  
int Indirectadd<T>::Location_get(T x)  
{  
    for(int i=0;i<length;i++)  
    {  
        if(add[i]->data==x)  
            return (i+1);  
    }  
    return 0;  
}  
template<typename T>  
void Indirectadd<T>::Insert(int i,T x)  
{  
    if(i>=length) throw"错误";  
    for(int j=length;j>i-1;j--)  
        add[j]=add[j-1];  
    add[i-1]=new Node<T>;  
    add[i-1]->data=x;  
    length++;  
}  
template<typename T>  
T Indirectadd<T>::Delete(int i)  
{  
    if(i<1||i>length) throw"错误";  
    Node<T> *p;  
    p=add[i-1];  
    T x=p->data;  
    for(int j=i-1;j<length-1;j++)  
         add[j]=add[j+1];  
    delete p;  
    length--;  
    add[length]=NULL;  
    return x;  
};  
template<typename T>  
void Indirectadd<T>::Printlist()  
{  
    for(int i=0;i<length;i++)  
        cout<<add[i]->data<<" ";  
}  
void main()  
{  
    int stu[10]={90,87,95,77,80,91,74,89,92,97};
	Indirectadd<int>student(stu,10);
	cout<<"表的长度为:"<<student.Length()<<endl;
	cout<<"学生成绩如下:"<<endl;
	student.Printlist();
	student.Number_get(3);
	cout<<"第三位学生的成绩为:"<<student.Number_get(3)<<endl;
	cout<<"成绩为90的学生序号为:"<<student.Location_get(90)<<endl;
	cout<<"在序号为1的学生后面插进新成绩80:"<<endl;
	student.Insert(1,80);
	student.Printlist();
	cout<<endl;
	cout<<"删除序号为2的学生的成绩:"<<endl;
	student.Delete(2);
	student.Printlist();
	cout<<endl;
}  


一、实验目的


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


二、实验时间


        准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。

三、实验内容


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

        2、用双链表实现。


四、实验结果截图


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值