首页 > 代码库 > (源代码见大话数据结构)线性表—静态链表

(源代码见大话数据结构)线性表—静态链表

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALS 0
typedef int ElemType;
typedef int Status;
typedef struct
{
    ElemType data;
    int cur;
} Component,StaticLinkList[MAXSIZE];
Status InitList(StaticLinkList space);
int Malloc_Sll(StaticLinkList space);
Status ListLength(StaticLinkList space);
Status ListInsert(StaticLinkList L,int i,ElemType e);

int main()
{
    StaticLinkList l;
    int i;
    InitList(l);
    ListInsert(l,1,1314);
    ListInsert(l,1,5778);
    ListInsert(l,1,890890);
    i=l[MAXSIZE-1].cur;
    printf("%d\n",ListLength(l));
    while(i)
    {
        printf("%d\n",l[i].data);
        i=l[i].cur;
    }
    return 0;
}
Status InitList(StaticLinkList space)
{
    int i;
    for(i=0;i<MAXSIZE-1;i++)
    {
        space[i].cur=i+1;
    }
    space[MAXSIZE-1].cur=0;
    return OK;
}
int Malloc_Sll(StaticLinkList space)
{
    int i;
    i=space[0].cur;
    if(i)
    {
        space[0].cur=space[i].cur;//因为没使用的分量组成一个备用链表?
    }
    return i;
}
Status ListLength(StaticLinkList L)
{
    int k=L[MAXSIZE-1].cur,length=0;
    while(k)
    {
        k=L[k].cur;
        length++;
    }
    return length;
}
Status ListInsert(StaticLinkList L,int i,ElemType e)
{
    int j,k,l;
    k=MAXSIZE-1;
    if(i<1||i>ListLength(L)+1)
        return ERROR;
    j=Malloc_Sll(L);
    if(j)
    {
        L[j].data=e;
        for(l=1;l<i;l++)
        {
            k=L[k].cur;
        }
        L[j].cur=L[k].cur;
        L[k].cur=j;
        return OK;
    }
    return ERROR;
}

实战中的BUG:

1.静态链表的插入ListInsert(StaticLinkList L,int i,ElemType e),i是第i个元素,静态链表中第一个元素(即下标为零的元素)相当于单链表的头结点作用,LitsLength(L)是算的静态链表中数据元素的个数。数据元素与元素不同,元素是指数组中的元素,数据元素是数组中被使用的分量。因为没搞清这两个概念,把插入函数中的if()搞错了。/(ㄒoㄒ)/~~

2.静态链表中数据元素的个数LitsLength(L),同样因为搞混了概念,把数组中第一个元素也算了进去。。

 

(源代码见大话数据结构)线性表—静态链表