美文网首页
线性表的静态链表

线性表的静态链表

作者: hhhhhhhhhh1655 | 来源:发表于2018-03-28 14:40 被阅读3次

静态链表定义

#define Error -1
#define OK   1
#define MaxSize 100
typedef int Status;

typedef int ElementType;
typedef struct {
    int cur;
    ElementType data;
}Compnent,StaticLinkList[MaxSize];

静态链表的增删


//数组的第一个元素,即下标为0的那个元素的cur就存放备用链表的第一个结点的下标
//数组的最后一个元素,即下标为MAXSIZE-1的cur则存放第一个有数值的元素的下
Status initStaticLinkList(StaticLinkList list){
    for (int i = 0; i < MaxSize-1; i++) {
        list[i].cur = i+1;
    }
    
    list[MaxSize-1].cur = 0;
    
    return OK;
}

//空闲的下标
int malloc_SLL(StaticLinkList list){
    
    int cur = list[0].cur;
    if (cur) {
        list[0].cur = list[cur].cur;
        
    }
    
    return cur;
}
//获得长度
int ListLength(StaticLinkList list){
    int k = list[MaxSize-1].cur;
    int j = 0;
    
    while (k) {
        k = list[k].cur;
        j++;
    }

    return j;
}


//插入
Status staticListInsert(StaticLinkList L, int i, ElementType e){
    if (i <1 || i > ListLength(L)+1 || i > MaxSize-2) {
        return errno;
    }
    //tag是要i的前一个元素的下标值
    int tag = MaxSize-1;
    int cur = malloc_SLL(L);

    if (cur) {
        for (int j = 1; j < i ; j++) {
            tag = L[tag].cur;
        }
        L[cur].data = e;
        L[cur].cur = L[tag].cur;
        L[tag].cur = cur;
    }
 
    return OK;
}

//删除
Status staticListDelete(StaticLinkList L, int i){
   
    if (i < 1 || i > ListLength(L)) {
        return errno;
    }
    int tag = MaxSize-1;
    
    //找到要删除的节点的前一个节点的下标
    for (int j = 1; j < i ; j++) {
        tag = L[tag].cur;
    }
    
    // 将删除的节点的前 一个节点的下标指向后一个节点的下标
    int k = L[tag].cur;
    L[tag].cur = L[k].cur;
        //将被删除的节点添加到备用链表
    StaticListFree_SLL(L, k);

    return OK;
}

// 将下标为K的空闲节点回收到备用链表

void StaticListFree_SLL(StaticLinkList L, int k){
    
    L[k].cur = L[0].cur;
    L[0].cur = k;
}


//打印链表
void staticListLog(StaticLinkList L){
    
    int length = ListLength(L);
    
    
   int tag = L[MaxSize-1].cur;
    for ( int i = 0; i < length; i++) {
        
        printf("%d---", L[tag].data);
        
        tag = L[tag].cur;
    }
    
    printf("------\n");

}



相关文章

  • 数据结构之线性表(下)

    单链表:通过指针连接的线性表 没有指针的语言如果表示链表?答案是静态链表,静态链表用数组表示,使用元素的物理位序来...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构——线性表

    线性表分为顺序存储结构和链式存储结构(单链表,静态链表,循环链表,双向链表)。 单链表(**一种动态结构,所占空间...

  • 线性表

    线性表是零个或者多个具有相同的数据元素的有限序列。 线性表的二大结构:顺序存储结构、链式存储结构(单链表、静态链表...

  • 线性表

    1.线性表 1.1 顺序表(顺序存储) 静态分配 动态分配 1.2 单链表 单链表定义 不带头节点的单链表插入操作...

  • 线性表(静态链表)

    线性表:包含零个或多个数据元素的有限序列。 线性链表:指的是使用数组代替指针,来描述单链表;每个数据项含有data...

  • 线性表 - 静态链表

    下面查看静态链表的几种状态

  • PHP 实现数据结构

    参考诸多视频和文章,主要通过PHP 实现线性表的顺序存储结构,单链表,静态链表,双向链表以及二叉树等数据结构,代码...

  • 线性表的静态链表

    静态链表定义 静态链表的增删

网友评论

      本文标题:线性表的静态链表

      本文链接:https://www.haomeiwen.com/subject/ljnycftx.html