美文网首页
14-链表用法_案例代码

14-链表用法_案例代码

作者: ibo | 来源:发表于2017-02-03 15:44 被阅读0次

    链表

    代码 1 :

    #include <stdio.h>
    
    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 <stdio.h>
    #include <stdlib.h>
    
    //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;i<list->last;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;i<list->last;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-链表用法_案例代码

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