1. 程式人生 > >學生成績單鏈表

學生成績單鏈表

 #include<iostream.h>
template<class DataType>
struct Node
{
DataType data;
Node<DataType>*next;
} ;


template<class DataType>
class ScoreList
{
public:
ScoreList();
ScoreList(DataType a[],int n);
~ScoreList();
void Insert(int i,DataType x);
int Search(DataType x);
DataType Delete(int i);
void Print();
private:
Node<DataType>*first;
};


template<class DataType>
ScoreList<DataType>::ScoreList()
{
first=new Node<DataType>;
first->next=NULL;
}


template<class DataType>
ScoreList<DataType>::ScoreList(DataType a[],int n)
{
Node<DataType>*r,*s;
first=new Node<DataType>;
r=first;
for(int i=0;i<n;i++)
{s=new Node<DataType>;
s->data=a[i];
r->next=s;r=s;
}
r->next=NULL; 
}


template<class DataType>
ScoreList<DataType>::~ScoreList()
{
Node<DataType>*q=NULL;
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}


template<class DataType>
void ScoreList<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p=first,*s=NULL;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else{
s=new Node<DataType>;s->data=x;
s->next=p->next;p->next=s;

}


template<class DataType>
DataType ScoreList<DataType>::Delete(int i)
{
Node<DataType>*p=first,*q=NULL;
DataType x;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL||p->next==NULL)throw"位置";
else
{
q=p->next;x=q->data;
p->next=q->next;
delete q;
return x;
}
}


template<class DataType>
int ScoreList<DataType>::Search(DataType x)
{
Node<DataType>*p=first->next;
int count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}


template<class DataType>
void ScoreList<DataType>::Print()
{
   Node<DataType>*p=first->next;
   while(p!=NULL)
   {
    cout<<p->data<<" ";
    p=p->next;
   }
   cout<<endl;
}


int main()
{
int r[5]={11,22,33,44,55};
ScoreList<int>S(r,5);
cout<<"插入前資料為"<<endl;
S.Print();
cout<<"在第3個位置插入成績為60的元素"<<endl;
try
{
S.Insert(3,60);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"現資料為"<<endl;
S.Print();
cout<<"刪除第5個成績"<<endl;
S.Delete(5);
cout<<"現資料為"<<endl;
S.Print();
cout<<"查詢成績為55的位置"<<endl;
cout<<S.Search(55)<<endl;

return 0;}