静态链表

41 阅读1分钟
结构体
struct Node
{
    Elemtype data;
    int next;
};

typedef struct Node SLinkList[MAXSIZE];
初始化
void InitList(SLinkList L)
{
    L[0].next = -1;  //-1表示为尾
    for(int i = 1; i < MAXSIZE; ++i)
          L[i].next = 0;               //next为0表示该结点为空
}
判空
bool Empty(SLinkList L)
{
    if(L[0].next == -1);
        return true;
    return false;
}
头插
int index = 1;
//以0作为头结点
bool HeaderInsert(SLinkList L, Elemtype e)
{
    if(index == MAXSIZE)
        return false;
    L[index].data = e;
    L[index].next = L[0].next;
    L[0].next = index++;
    return true;
}
插入

在结点p后插入结点s

void Insert(SLinkList L,int p,int s)
{
    L[s].next = L[p].next;
    L[p].next = s;
}
删除

删除结点p后的结点

bool Delete(SLinkList L, int p)
{
    if(L[p].next == 0) return false;  //相当于p==NULL
    int q = L[p].next;
    if(L[q].next == 0) return false;  //相当于q==NULL
    L[p].next = L[q].next;
    return true;
}
遍历
for(int i = L[0].next; i != -1; i = L[i].next)
        printf("%d ", L[i].data);