定义和初始化
//静态链表的定义
#define maxsize 10
typedef struct {
int data;
int next;
}SLinkList[maxsize];
SLinkList a;
//初始化静态链表
bool InitSLinkList(SLinkList &a){
a[0].next=-1;//方便判空
for(int i=1;i<maxsize;i++)
a[i].next=-2;//赋一个特殊的值,表示空闲结点,方便后续操作
return true;
}
查找
//静态链表的查找,返回游标
int FindSLinkList(SLinkList a,int e){
int i=0;//i为第一个结点的位置
//从头开始遍历查找
while(a[i].next!=-2){
if(a[i].data==e)
return i;
i=a[i].next;
}
return false;
}
插入
//静态链表的插入——插入位序为i的结点
//找到一个空结点存入元素,遍历找到第i-1个元素,修改i结点的游标,修改i-1结点的游标
bool InsertNextNode(SLinkList &a,int i,int e)
{
//遍历静态链表找到一个空结点
int j=0;//k记录位序
while(a[j].next!=-2){
j=a[j].next;
}
a[j].data=e;
//找到位序为i-1的结点m,m用来计数
for(int m=1,k=0;m<i;m++){
k=a[k].next;//k是游标
}
a[j].next=a[m].next;
a[m].next=k;
return true;
}
删除
//静态链表删除元素为e的结点
bool DeleteSNode(SLinkList &a,int e){
int j=0,i=0;//i作为记录
//从头找到元素为e的结点的下标i
while(a[j].data!=e){
j=a[j].next;
i++;
}
//遍历结束没有找到e
if(k>=maxsize||k<0)
return false;
//寻找前驱结点的游标k并修改
for(int m=1,k=0;m<i;m++){
k=a[k].next;//k是游标
}
k=a[i].next;
//被删除的结点置空
a[i].next=-2;
return true;
}