静态链表的定义、初始化、查找、插入、删除

定义和初始化

//静态链表的定义
#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pumkinnnan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值