1. 程式人生 > >實驗3-線性表綜合實驗單鏈表

實驗3-線性表綜合實驗單鏈表

建立一個由n個學生成績的連結串列,n的大小由自己確定,每一個學生的成績資訊由自己確定,實現資料的對錶進行插入、刪除、查詢等操作。分別輸出結果。

#include<iostream.h>            

struct Node       //結構體
{      
    float data;      
    Node *next;      
};        
class LinkList
{    
public:    
LinkList();              //無參建構函式,建立只有頭結點的空連結串列    
LinkList(float score[],int n); //建構函式    
    ~LinkList()                        //解構函式    
{    
Node *q;    
while(first!=NULL)    
{    
q=first;    
first=first->next;    
delete q;    
}    
}    
void Insert(int i,float x);          //插入操作,在位置i插入元素x    
float Delete(int i);            //刪除操作,刪除位置i的元素    
float Get(int i);          //按位查詢    
    int Locate(float x);   //按值查詢    
void Print();             //輸出操作    
private:    
        Node *first; //頭指標      
};          
LinkList::LinkList()          //建構函式   
{      
    first = new Node;    //建立頭結點   
    first->next = NULL;      
}            
LinkList::LinkList(float score[],int n)    
{    
    Node *s;    
    first=new Node; 
first->next=NULL;  //初始化一個空連結串列    
    for(int i=0;i<n;i++)    
    {    
        s=new Node;
s->data=score[i];    
        s->next=first->next;
first->next=s;      
    }    
}    
void LinkList::Insert(int i,float x)   //插入 
{    
    Node *p,*s; 
int count;    
    p=first;count=0;    
    while(p!=NULL&&count<i-1)    
    {    
        p=p->next;    
        count++;    
    }    
    if(p==NULL)throw"位置非法";    
    else{    
        s=new Node;
s->data=x;    
        s->next=p->next;
p->next=s;    
    }    
}       
float LinkList::Delete(int i)      //刪除
{    
Node *q,*p;
float x; 
int count;    
p=first;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;    
}    
}           
float LinkList::Get(int i)      //按位查詢
 {    
Node *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;    
}         
int LinkList::Locate(float x)  //按值查詢  
{    
Node *p;
int count;    
p=first->next;
count=1;    
while(p!=NULL)    
{    
if(p->data==x)return count;    
p=p->next;    
count++;    
}    
return 0;    
}    
void LinkList::Print()   //輸出操作  
 {    
Node *p;    
p=first->next;    
while(p!=NULL)    
{
cout<<p->data<<"  ";;    
p=p->next;    
}    
}       
void main()    
{    
    float score[10]={55.5,60,98,85.5,67,89,77,80.5,60,67};    
    LinkList student(score,10);        
      cout<<"插入前學生成績:";    
    student.Print();   
    cout<<endl<<endl<<"在位置5插入成績90"<<endl;  
    cout<<"插入後:";  
    student.Insert(5,99);      
    student.Print();   
    cout<<endl<<endl<<"在刪除前成績:"<<endl;   
    student.Delete(1);  
    cout<<"刪除後:";  
    student.Print();    
    cout<<endl<<endl<<"位置10的成績:";  
    cout<<student.Get(10);   
    cout<<endl<<endl<<"成績77所在位置:";   
    cout<<student.Locate(77);  
    cout<<endl;      

}