实验三 静态链表实现学生成绩处理

#include<iostream>  
using namespace std;  
const int maxsize=20;  
struct snode  
{float data;  
int next;  
};  
  
class student{       //定义一个student类  
int first,avail;  
snode slist[maxsize];  
public:  
student();  
student(float s[],int n);  
~student(){count--;}  
int length();  
void insert(float x);  
float get(int i);  
int locate(float x);  
void dele(int i);     //删除第i位  
void printlist();   //遍历输出  
static int count;  
};  
int student::count=0;  
student::student(){   // 建立空的静态链表  
first=0;avail=1;  
    slist[first].next=-1;  
slist[first].data=NULL;  
}  
student::student(float s[],int n)     //建立长度为n的静态链表  
{first=0;avail=1;  
    slist[first].next=1;  
slist[avail].data=NULL;  
for(int i=0;i<n;i++)  
{  
slist[avail].data=s[i];  
slist[avail].next=avail+1;  
avail++;  
count++;  
}slist[avail].next=-1;  
}  
int student::length(){    //返回静态链表长度  
return count;  
}  
float student::get(int i)     //按位查找  
{float x;  
if(i<1||i>count) cout<<"查找位置错误"<<endl;  
for(int n=0;n<count;n++)  
{if(slist[n].next==i) x=slist[i].data;  
}  
return x;  
}  
int student::locate(float x)  
{  
    for(int i=1;i<=count;i++)  
    if(slist[i].data==x) return slist[i-1].next;  
    return 0;  
}  
void student::insert(float x)     //插入操作,插入x的值  
{avail=count;  
    if(count==maxsize) cout<<"静态链表已满"<<endl;  
slist[avail].next=avail+1;  
slist[avail+1].data=x;  
slist[avail+1].next=-1;  
count++;  
}  
void student::dele(int i)                //删除第i个结点操作  
{  
    if(i<1||i>count) return;  
    else{  
slist[i-1].next=slist[i].next;  
    slist[i].next=-1;  
    slist[i].data=NULL;  
    count--;}  
}  
void student::printlist()     //遍历输出操作  
{int s=slist[first].next;  
cout<<"学生成绩为"<<"\t";  
for(int i=1;i<count+1;i++)  
{  
    cout<<slist[s].data<<"\t";  
s=slist[s].next;}  
  
cout<<endl;  
}      
void main()  
{  
    float s[5]={77,88,99,100,76.5};  
    student a(s,5);  
    cout<<"**************************\n"<<"静态链表实现学生成绩处理\n"<<"**************************\n";  
    cout<<"共有"<<a.length()<<"位学生成绩 。"<<endl;  
    a.printlist();  
    cout<<"查找第三位学生成绩为 "<<a.get(3)<<endl;  
    cout<<"成绩为77的为第"<<a.locate(77)<<"位"<<endl;  
    a.insert(80);  
    a.printlist();  
    cout<<"删除第2个学生成绩 \n";  
    a.dele(2);  
    a.printlist();  
    cout<<"共有"<<a.length()<<"位学生成绩 "<<endl;  

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值