14-链表用法_案例代码

链表

代码 1 :

#include 

typedef struct node{

    int data[10];

    int newdata[0];

}list_t;

int main(int argc, const char *argv[]){
    list_t list;

    printf("%d\n",sizeof(list_t));

    printf("%p\n",&list);

    printf("%p\n",list.data);

    printf("%p\n",list.newdata);

    int i;
    for(i=0;i<=9;i++)
    {
        list.data[i]=i+1;
    }

    printf("%d\n",list.newdata[-1]);

    return 0;
}


代码 2 :

#include 
#include 

//define   typedef
//预编译的时候文字替换

typedef struct node{
    int *data;
    int last;
    int size;
}list_t;   // list_t --> struct node

//驼峰标记法   struct node -->  NODE ;   NODE
//不建议使用   编译器可能过不去,容易混淆

//创建
list_t* create_list(int size)
{
    if(size<=0)
        return NULL;

    list_t* list=malloc(sizeof(list_t));
    //堆区创建一个连续空间,返回首地址给list

    //(list_t* )malloc(sizeof(list_t));
    //windows 要求类型匹配

    list->last=-1;
    list->size=size;

    list->data=malloc(sizeof(int)*size);

    //  ->    .区别
    //  结构体变量 访问成员  用.
    //  指针   ->

    return list;
}

//判满
int isfull(list_t* list)
{
    if(list==NULL)
        return 0;

    // NULL    -->   (void *)0   零地址   保护着的,用来做比较
    // 绝对不能用此地址访问成员变量和赋值

    return list->last==list->size-1;
}

//判空
int isempty(list_t* list)
{
    if(list==NULL)
        return 0;

    return list->last==-1;
}


//增
int insert_head_list(list_t* list,int data)
{

    //判满
    if(list==NULL||isfull(list))
        return -1;

    int i;
    for(i=list->last;i>=0;i--)
    {
        list->data[i+1]=list->data[i];
    }

    //赋值
    list->data[0]=data;

    list->last++;

    return 0;
}

//删
int delete_head_list(list_t* list)
{
    if(list==NULL||isempty(list))
        return -1;

    int i;

    for(i=0;ilast;i++)
    {
        list->data[i]=list->data[i+1];
    }

    list->last--;

    return 0;
}

//查
int locate_list(list_t* list,int data)
{
    if(list==NULL||isempty(list))
        return -1;

    int i;

    for(i=0;i<=list->last;i++)
    {
        if(list->data[i]==data)
            return i;
    }

    return -1;
}

//改
int change_index_list(list_t* list,int index,int data)
{
    if(list==NULL||isempty(list)||index<0||index>list->last)
        return -1;

    list->data[index]=data;

    return 0;
}

//指定位置插入
int insert_index_list(list_t* list,int index,int data)
{
    //判满
    if(list==NULL||isfull(list)||index<0||index>list->last+1)
        return -1;

    int i;
    for(i=list->last;i>=index;i--)
    {
        list->data[i+1]=list->data[i];
    }

    //赋值
    list->data[index]=data;

    list->last++;

    return 0;
}

//指定位置删除
int delete_index_list(list_t* list,int index)
{
    if(list==NULL||isempty(list)||index<0||index>list->last)
        return -1;

    int i;

    for(i=index;ilast;i++)
    {
        list->data[i]=list->data[i+1];
    }

    list->last--;

    return 0;
}

//打印
int print_list(list_t* list)
{
    if(list==NULL||isempty(list))
        return -1;

    int i;

    for(i=0;i<=list->last;i++)
    {
        printf("%3d ",list->data[i]);
    }
    printf("\n");

    return 0;
}

//逆打印
int re_print_list(list_t* list)
{
    if(list==NULL||isempty(list))
        return -1;

    int i;

    for(i=list->last;i>=0;i--)
    {
        printf("%3d ",list->data[i]);
    }
    printf("\n");

    return 0;
}

//清空
int clear_list(list_t* list)
{
    if(list==NULL)
        return -1;

    list->last=-1;
    return 0;
}

int length_list(list_t* list)
{
    if(list==NULL||isempty(list))
        return 0;

    return list->last+1;
}

//销毁
int destory_list(list_t* list)
{
    if(list==NULL)
        return -1;

    free(list);

    return 0;
}

int main(int argc, const char *argv[])
{
    list_t* list=create_list(30);

    int i;

    for(i=1;i<=15;i++)
    {
        if(insert_head_list(list,i)==0)
            print_list(list);
    }

    change_index_list(list,locate_list(list,15),250);

    insert_index_list(list,locate_list(list,13),230);

    print_list(list);

    delete_index_list(list,locate_list(list,230));

    print_list(list);

    printf("length_list:%d\n",length_list(list));

    clear_list(list);

    printf("length_list:%d\n",length_list(list));

    destory_list(list);

    list=NULL;
    //free以后,malloc的空间理论上不可再使用,可能会出现野指针,赋值NULL是好习惯

    return 0;
}

你可能感兴趣的:(14-链表用法_案例代码)