#include<iostream.h>
#include<stdlib.h>
typedef int ElemType;
typedef int DataType;
const int MaxSize=100;
typedef struct
{
ElemType data;
int cur;
}SLinkList [MaxSize];
class SLink
{
public:
void Free_SL(SLinkList space,int k);
int Malloc_SL(SLinkList space);
void SLinkInit(SLinkList space);
int SListLength(SLinkList space);
void SlistInsert(SLinkList space,int i,ElemType e);
void SListDelete(SLinkListspace,int i);
void SListTraverse(SLinkList space);
};
//将下标为K的空闲结点回收到备用链表
void SLink::Free_SL(SLinkList space,int k)
{
space[k].cur=space[0].cur; //将备用链表链到K之后
space[0].cur=k; //将K链到备用链表头之后
}
//分配备用链表的一个结点,返回下标
//若为0,则说明备用链表用完
int SLink::Malloc_SL(SLinkList space) //备用链表
{
int i=space[0].cur;
if(space[0].cur) //判断备用链表是否非空
space[0].cur=space[i].cur; //备用链表头指针指向第二个空结点
return i; //返回第一个空结点
}
void SLink::SLinkInit(SLinkList space)
{
int i;
for(i=0;i<MaxSize;i++)
space[i].cur=i+1; //讲所有结点链入备用链表
space[0].cur=space[1].cur; //备用链表头指针链向第二个结点
space[1].cur=0; //第一个结点作为链表的头结点
}
//获取链表长度
int SLink::SListLength(SLinkList space)
{
int len=0;
int i=space[1].cur; //用头指针第一个结点的下标
while(i)
{
++len;
i=space[i].cur;
}
return len;
}
//在链表的第i个位置插入元素
void SLink::SlistInsert(SLinkList space,int i,ElemType e)
{
if(i<1||i>SListLength(space)+1) //超出范围
return;
int k=1,j;
for(j=0;j<i-1;j++) //使K指示要插入的结点的前一个结点
k=space[k].cur;
int v=Malloc_SL(space);
if(v) //如果有空间
{
space[v].data=e;
space[v].cur=space[k].cur;
space[k].cur=v; //插入链表
}
}
//删除第i个位置的元素
void SLink::SListDelete(SLinkList space,int i)
{
if(i<1||i>SListLength(space)) //超出范围退出
return ;
int k=1,j;
for(j=0;j<i-1;j++) //使K指示要删除的结点的前一个结点
k=space[k].cur;
int temp=space[k].cur;
space[k].cur=space[temp].cur;
Free_SL(space,temp);
}
void SLink::SListTraverse(SLinkList space)
{
int i=space[1].cur;
while(i)
{
cout<<space[i].data<<endl;
i=space[i].cur;
}
}
int main()
{
cout<<"静态链表实现学生成绩"<<endl;
cout<<"学生的数据结构成绩为:"<<endl;
SLink L;
SLinkList space;
L.SLinkInit(space);
int i;
for(i=1;i<=5;i++)
L.SlistInsert(space,1,i);
L.SListTraverse(space);
cout<<endl<<endl<<"删除位置3:"<<endl;
L.SListDelete(space,3);
L.SListTraverse(space);
return 0;
}
实验三 用静态链表实现学生成绩管理系统
猜你喜欢
转载自blog.csdn.net/nika_jy_L/article/details/80344410
今日推荐
周排行