14-链表用法_案例代码

来源:互联网 发布:js 局部打印pdf 编辑:程序博客网 时间:2024/05/24 06:00

链表

代码 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;}
0 0