#include<iostream>
using namespace std;
const int MaxSize = 100;
template<class T>
struct SNode
{
T data;
int next;
};
template<class T>
class Staticlinkedlist
{
public:
Staticlinkedlist(T a[],int n);
~Staticlinkedlist() {};
int length();
T getlist(int i);
int locate(T x);
void insert(int i, T x);
void deletelist(int i);
void printlist();
private:
int first;
int avail;
int len;
SNode<T> Slist[MaxSize];
};
template<class T>
Staticlinkedlist<T>::Staticlinkedlist(T a[],int n)
{
for (int i =0;i<MaxSize;i++)
{
Slist[i].next = i+1;
}
len = 0;
Slist[MaxSize-1].next = -1;
for (int j = 0;j<n;j++)
{
if (avail == -1)
{
break;
}
int s = avail;
avail = Slist[avail].next;
Slist[s].data = a[j];
Slist[s].next = Slist[first].next;
Slist[first].next = s;
len++;
}
}
template<class T>
int Staticlinkedlist<T>::length()
{
return len;
}
template<class T>
T Staticlinkedlist<T>::getlist(int i)
{
if(i<=0||i>len)
{
throw"出错";
}
int s = first;
for (int j = 0;j<i;j++)
{
s = Slist[s].data;
}
return Slist[s].data;
}
template<class T>
int Staticlinkedlist<T>::locate(T x)
{
int count=0;
int s = first;
while(count<len && Slist[s].next!=-1)
{
if (Slist[s].data == x)
{
return count;
}
count++;
s = Slist[s].next;
}
return 0;
}
template<class T>
void Staticlinkedlist<T>::insert(int i, T x)
{
int s = first;
int p = avail;
Slist[p].data = x;
avail = Slist[avail].next;
for (int count=0;count<i-1 && count<len;count++)
{
s = Slist[s].next;
}
Slist[p].next = Slist[s].next;
Slist[s].next = p;
len++;
}
template<class T>
void Staticlinkedlist<T>::deletelist(int i)
{
int count = 0;
int s = first;
while(count<i-1&&count<len)
{
s = Slist[s].next;
count++;
}
int p = Slist[s].next;
Slist[p].next = avail;
avail = p;
len--;
}
template<class T>
void Staticlinkedlist<T>::printlist()
{
int s = Slist[first].next;
for (int i = 1;i<=len;i++)
{
cout<<Slist[s].data;
cout<<" ";
s = Slist[s].next;
}
cout<<endl;
}
int main()
{
int s[10]={100,98,94,92,90,87,85,73,62,60};
Staticlinkedlist<int> sl(s,10);
cout<<"十人成绩:"<<endl;
sl.printlist();
cout<<"该表长度:"<<sl.length()<<endl;
cout<<"第7位学生成绩:"<<endl;
cout<<sl.getlist(7)<<endl;
cout<<"成绩为94的学生的位置:"<<endl;
cout<<"第"<<sl.locate(94)<<"位"<<endl;
cout<<"第4位插入分数93,显示所有成绩:"<<endl;
sl.insert(4,93);
sl.printlist();
cout<<"当前长度为:"<<sl.length()<<endl;
cout<<"删除第2位和第9位成绩,显示所有成绩:"<<endl;
sl.deletelist(2);
sl.deletelist(9);
sl.printlist();
cout<<"当前长度为:"<<sl.length()<<endl;
return 0;
}
实验二静态链表
最新推荐文章于 2023-02-20 16:42:21 发布