#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;
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;
}