数据结构实验三间接寻址学生信息

#include<iostream>  
using namespace std;  
  
const int Maxsize = 100;  
  
template<typename T>  
struct Node {  
    T data;  
    Node<T> *next;  
};  
  
template<typename T>  
class inadd{  
    public:  
        inadd();//无参构造函数  
        inadd(T score[],int n);//有参构造函数  
        virtual ~inadd();//析构函数  
        void print();//遍历操作  
        T get(int i);//按位查找操作  
        int Locate(T x);//按值查找操作  
        void insert(int i,T x);//插入操作  
        T Delete(int i);//删除操作  
        bool changeList(int i, T x);  //改变某一结点的值 i为节点的位置,x为替换的值  
    private:  
        Node<T> *first; //头指针  
        int length; //结点数量  
        Node<T> *address[Maxsize];  //结点指针数组  
};  
  
template<typename T>  
inadd<T>::inadd()  
{  
    first=new Node<T>;  
    first->next=NULL;  
}  
  
template<typename T>  
inadd<T>::inadd(T score[],int n)  
{  
    if (n > Maxsize) throw("溢出");  
    Node<T> *s;  
    first = new Node<T>;first->next=NULL; //初始化一个空链表    
    for(int i=n-1;i>=0;i--)    
    {    
        s=new Node<T>;s->data=score[i];  //为每个数组元素建立一个结点    
        s->next=first->next;first->next=s;  //将结点s插入头结点之后    
    }  
}  
  
template<typename T>  
inadd<T>::~inadd()                 //析构函数    
{  
    Node<T> *q;  
    while(first!=NULL)  
    {  
        q=first;  
        first=first->next;  
        delete q;  
    }  
}    
  
template<typename T>      
void inadd<T>::insert(int i,T x)    
{    
    Node<T>*p,*s;int count;    
    p=first;count=0;    
    while(p!=NULL&&count<i-1)    
    {    
        p=p->next;    
        count++;    
    }    
    if(p==NULL)throw"位置非法";  
    s=new Node<T>;s->data=x;  
    s->next=p->next;  
    p->next=s;  
    length++;  
}  
  
template<typename T>      
T inadd<T>::Delete(int i)  
{  
    Node<T> *q,*p; T x; int count;    
    p=first;count=0; //注意P指针要指向头结点    
    while(p!=NULL&&count<i-1)   //此操作目的是找到i-1个结点  
    {  
        p=p->next;  
        count++;    
    }  
    if(p==NULL||p->next==NULL)throw"位置";  //结点p不存在或p后继结点不存在  
    else{  
        q=p->next;x=q->data;  //暂存被删结点    
        p->next=q->next;    
        delete q;    
        return x;  
    }  
}    
    
template<typename T>      
T inadd<T>::get(int i)    
{  
    Node<T>*p;int count;  
    p=first->next;count=1;  
    while(p!=NULL&&count<i)  
    {p=p->next;count++;}  
    if(p==NULL)throw"位置非法";  
    else return p->data;  
}    
    
template<typename T>      
int inadd<T>::Locate(T x)    
        {    
            Node<T>*p;int count =1;    
            p=first->next;    
            while(p!=NULL)    
            {    
                if(p->data==x)return count;    
                p=p->next;    
                count++;    
            }    
            return 0;    
        }    
    
template<typename T>      
void inadd<T>::print()    
        {    
            Node<T>*p;    
            p=first->next;    
            while(p!=NULL)    
            {cout<<p->data<<"  ";;    
            p=p->next;    
            }    
        }  
  
void main()    
{    
    double score[5]={69.3,52.6,99,85.7,76.9};    
    inadd<double>student(score,5);    //创建对象    
    cout<<"              学生数据结构成绩"<<endl;      
    student.print();      
    cout<<endl<<endl<<"在位置3插入成绩66,结果如下:"<<endl;      
    student.insert(3,66);      
    student.print();      
    cout<<endl<<endl<<"在位置2删除成绩为:"<<student.Delete(2)<<endl<<"删除后结果如下:"<<endl;      
    student.print();      
    cout<<endl<<endl<<"位置3的成绩为:"<<student.get(3)<<endl;      
    cout<<endl<<endl<<"成绩76.9所在位置为:"<<student.Locate(76.9)<<endl;    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值