首页 > 代码库 > 数组单链表

数组单链表

在那个久远的没有指针的年代,,据说伟大的先人们都是用数组来实现单链表

#define MAXSIZE 20
typedef struct
{
    int cursor;
    int data;
}Component;


void cursor_init(Component list[], int *len)
{
    int i =  0;
    for(i=0; i<MAXSIZE; i++)
    {
        list[i].cursor = i + 1;
    }
    list[MAXSIZE-1].cursor = 0;
    *len = 0;
}

void cursor_print1(Component list[])
{
    int start = list[MAXSIZE-1].cursor;
    int i = start;
    if(start == 0) {
        printf("kong -----\n");
        return;
    }
    while(i)
    {
        printf("%d ", list[i].data);
        i = list[i].cursor;
    }
    printf("\n");
}

void cursor_print2(Component list[], int *len)
{
    int start = list[MAXSIZE-1].cursor;
    int i = 0;
    for(i=0;i<*len;i++) {
        printf("%d ", list[start].data);
        start = list[start].cursor;
    }
    printf("\n");
 } 

void cursor_insert(Component list[], int position, int data, int *len)
{
    int i = 0;
    int start = list[MAXSIZE-1].cursor;
    int j = start;
    int p;
    if(position<1 || position > *len+1) {
        printf("no----\n");
        return;
    }
    
    p = list[0].cursor;
    list[p].data = data;
    list[0].cursor = list[p].cursor;
    
    if(start == 0) {
        list[MAXSIZE-1].cursor = p;
        list[p].cursor = 0;
    }else if( position==1 ){
        list[MAXSIZE-1].cursor = p;
        list[p].cursor = start;
    }else {
        for(i=1; i<position-1;i++)
        {
            j = list[j].cursor;
        }
        
        list[p].cursor = list[j].cursor;
        list[j].cursor = p;
    }
    
    *len += 1;
    
}

int main()
{
    Component list[MAXSIZE];
    int len;
    cursor_init(list, &len);
    
    cursor_insert(list, 1, 1, &len);
    cursor_insert(list, 2, 2, &len);
    cursor_insert(list, 3, 3, &len);
    cursor_insert(list, 4, 4, &len);
    cursor_insert(list, 5, 5, &len);
    cursor_insert(list, 3, 3, &len);
    cursor_insert(list, 4, 4, &len);
    cursor_insert(list, 5, 5, &len);
    cursor_insert(list, 3, 7, &len);
    cursor_insert(list, 4, 8, &len);
    cursor_insert(list, 1, 9, &len);
    
    cursor_print1(list);
    cursor_print2(list, &len);
    return 0;
}

删除跟插入类似,就不写了。。。。

数组单链表