实验三:用静态链表实现



#include<iostream.h>

const int MaxSize=100;

struct Node

{

        intdata;

        intnext;

};

class Student

{

public:

        Student();

        Student(inta[],int n);

        ~Student(){}

        staticint count;

        intLength();

        voidInsert(int i,int x);

        intDelete(int i);      

        intGet(int i);

        intLocate(int x);

        voidPrint();

private:

        intnode[10];

        intfirst;

        intavail;

        intlength;

};

int Student::count=0;

Student::Student(int a[],int n)

{

        inti,j;

        Node*s;

        length=0;

        for(i=0;i<10;i++)

        {

                 node[i].next=i+1;

        }

         node[Maxsize-1].next=-1;   

    avail=2;   

    first=1;   

    node[first].next=-1;   

    for (j=n-1;j>=0;j--)   

    {   

        if (avail==-1)   

        {   

            break;   

        }   

        s=avail;   

        avail=node[avail].next;

        node[s].data=score[j];   

        node[s].next=node[first].next;  

        node[first].next=s;   

        length++;   

    }   

}

int Student::Length()

{ 

    Node *p;

    p=first->next;   

    count=0;   

    while(p!=NULL) 

    {   

        p=p->next;   

        count++;   

     }   

    return length; 

 }

void Student::Insert(int i,int x)

{

        if(i<=0||i>length)throw"位置非法";

        intp,s,j;

        p=first;

        for(j=0;j<i;j++)

        {

                 p=node[p].next;

        }

        s=node[avail].next;

   node[avail].data = x;   

   node[avail].next = node[p].next;   

   node[p].next = avail;   

   avail = s;   

   length++; 

}

int Student::Delete(int i)

{

        intp,q,j,s;

        if(i<=0||i>length+1)throw"位置非法";

        p=first;

        for(j=1;j<=i;j++)

        {

                 p=node[p].next;

        }

        q=node[p].next;

        s=node[p].data;

        node[p].next= node[q].next;   

   node[q].next = avail;   

   avail = q;   

   length--; 

}

int Student::Get(int i)    

{

        intp,j;

        if(i<=0||i>length)throw"位置非法";

        p=first;

        for(j=0;j<i;j++)

        {

                 p=node[p].next;

        }

        returnnode[p].data;

}

int Student::Locate(int x)

{

        count=0;

        intp=first;

        while(node[p].next!=-1)

        {

                 p=node[p].next;

                 if(node[p].data==x)

                         returncount+1;

                 count++;

        }

        return-1;

}

void Student::Print()

{

        ints,i;

        s=node[first].next;

        for(i=1;i<=length;i++)

        {

                 cout<<node[s].data<<"";

                 s=node[s].next;

        }

}

void main()

{

        intscore[5]={60,65,70,80,85};

        StudentS(score,5);

        cout<<"学生的体育成绩:"<<endl;

        S.Print();

        cout<<endl<<endl<<"在位置3插入成绩75,结果如下:"<<endl;

        S.Insert(3,75);

        S.Print();

   cout<<endl<<endl<<"在位置6删除成绩为:"<<S.Delete(6)<<endl;

        cout<<"删除后结果如下:"<<endl;

        S.Print();

        cout<<endl<<endl<<"位置4的成绩为:"<<S.Get(4)<<endl;

        cout<<endl<<endl<<"成绩65所在的位置为:"<<S.Locate(65)<<endl;



}

代码不完整,不会打了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值