2022-9-15 数据结构链表

发布于:2022-12-16 ⋅ 阅读:(353) ⋅ 点赞:(0)

2.c

链表创建成功
判空成功-链表长度为零
此元素头插成功
此元素头插成功
此元素头插成功
此元素头插成功
D    E    O    G    已有数据已经全部遍历
判空成功-链表长度不为零
第4个位置查找成功
G
X    D    E    O    G    已有数据已经全部遍历
尾插成功
X    D    E    O    G    Y    已有数据已经全部遍历
判空成功-链表长度不为零
第0个位置查找成功
任意位置插入成功
M    X    D    E    O    G    Y    已有数据已经全部遍历
判空成功-链表长度不为零
头删除成功
X    D    E    O    G    Y    已有数据已经全部遍历
判空成功-链表长度不为零
判空成功-链表长度不为零
第2个位置查找成功
X    D    O    G    Y    已有数据已经全部遍历
判空成功-链表长度不为零
判空成功-链表长度不为零
第3个位置查找成功
X    D    O    已有数据已经全部遍历
判空成功-链表长度不为零
按值查找成功
按值查找成功
判空成功-链表长度不为零
判空成功-链表长度不为零
第3个位置查找成功
修改成功
X    D    B    已有数据已经全部遍历
判空成功-链表长度不为零
按照值修改成功
X    Q    B    已有数据已经全部遍历
此元素头插成功
此元素头插成功
此元素头插成功
Y    E    S    Y    已有数据已经全部遍历
判空成功-链表长度不为零
第3个位置查找成功
X    Q    B    Y    E    S    Y    已有数据已经全部遍历
2f.c

#include<stdio.h>
#include"2.h"
#include<stdlib.h>


//创建
LinkList list_creat(){
    LinkList L=(LinkList)malloc(sizeof(Node));
    if(NULL==L){
        printf("创建失败\n");
    }
    L->len=0;       
    return L;
}

//判空
int list_empty(LinkList L){
    if(NULL==L){
        printf("判断为空失败\n");
        return -1;
    }else if(L->len==0){
        printf("判空成功-链表长度为零\n");
        return 1;     //链表为空的时候返回1
    }else if(L->len!=0){
        printf("判空成功-链表长度不为零\n");
        return 0;     //链表不为返回0
    }

}

//头插
int list_insert_head(LinkList L,datapype e){
    if(NULL==L){
        printf("此链表不合法\n");
        return -1;
    }
    //数据封装
    LinkList p=(LinkList)malloc(sizeof(Node));
    if(NULL==p){
        printf("结点空间申请失败\n");
        return -2;
    }
    p->data=e;     //数据放入结点
    p->next=NULL;   //新的结点的指针域指向空
    
    //开始进行头插
    p->next=L->next;
    L->next=p;
    
    //表的变化
    L->len++;
    printf("此元素头插成功\n");
    return 0;
}

//遍历一下链表
void list_show(LinkList L){
    if(NULL==L){
        printf("此表不合法,无法遍历\n");
        return;
    }
    //辅助指针移动逐个遍历
    LinkList p=L->next;
    while(p!=NULL){
        printf("%c\t",p->data);
        p=p->next;
    }
    printf("已有数据已经全部遍历\n");
}

//按照位置查找返回结点
LinkList list_find_node(LinkList L,int pos){
    if(NULL==L||list_empty(L)||pos<0||pos>L->len){
        printf("按位置查找失败\n");
        return NULL;
    }
//定义辅助遍历指针
    LinkList q=L;     //此处指在车头
    for(int i=0;i<pos;i++){
        q=q->next;
    }
    printf("第%d个位置查找成功\n",pos);
    return q;       //此时指针就指向所要查找的那个位置
}

//申请结点打包元素
LinkList list_make_node(datapype e){
    LinkList f=(LinkList)malloc(sizeof(Node));
    f->data=e;
    f->next=NULL;
    return f;
}

//尾插函数
int list_insert_tail(LinkList L,datapype e){
    if(NULL==L){
        printf("想要尝试的尾插失败\n");
        return -1;
    }
    //循环遍历到最后一个结点进行插入
    //定义一个移动指针
    LinkList s=L;   
    while(s->next!=NULL){     //s->next
        s=s->next;
    }
    //跳出循环s指在最后一个结点
    //打包要插入的数据
    s->next=list_make_node('Y');
    L->len++;
    printf("尾插成功\n");
    return 0;
}

//任意位置插入函数
int list_insert_pos(LinkList L,datapype e,int pos){
    if(NULL==L||pos<1||pos>L->len+1){
        printf("插入失败\n");
        return -1;
    }
    LinkList s=list_find_node(L,pos-1);
    if(NULL==s){
        printf("插入失败\n");
        return -2;
    }
    LinkList p=list_make_node('M');
    p->next=s->next;
    s->next=p;
    L->len++;
    printf("任意位置插入成功\n");
    return 0;
}

//头删除
int list_delete_head(LinkList L){
    if(NULL==L||list_empty(L)){
        printf("头删除失败\n");
        return -1;
    }
    LinkList s=L->next; //标记要删除的结点
    L->next=s->next;
    L->len--;                    //孤立要删除的结点
    free(s);        //释放该节点
    s=NULL;
    printf("头删除成功\n");
    return 0;
}

//任意位置删除
int list_delete_pos(LinkList L,int pos){
    if(NULL==L||list_empty(L)||pos<0||pos>L->len+1){
        printf("任意位置删除\n");
        return -1;
    }
    LinkList s=list_find_node(L,pos-1);
    LinkList p=s->next;
    s->next=p->next;
    L->len--;
    free(p);
    p=NULL;
}


//尾部的删除
int list_delete_tail(LinkList L){
    if(NULL==L||list_empty(L)){
        printf("尾部删除失败\n");
        return -1;
    }
    LinkList s=list_find_node(L,L->len-1);
    LinkList t=s->next;
    L->len--;
    s->next=NULL;
    free(t);
    t=NULL;
    return 0;
}


//按照值查找返回对应的结点
LinkList list_search_value(LinkList L,datapype e){
    if(NULL==L||list_empty(L)){
        printf("查找失败\n");
        return NULL;
    }
    LinkList s=L->next;
    while(s->data!=e){
        s=s->next;
    }
    printf("按值查找成功\n");
    return s;
}


//按照位置修改函数
int list_update_pos(LinkList L,int pos,datapype new_e){
    if(NULL==L||list_empty(L)||pos<1||pos>L->len){
        printf("按照位置修改失败\n");
        return -1;
    }
    LinkList s=list_find_node(L,pos);
    s->data=new_e;
    s=NULL;
    printf("修改成功\n");
    return 0;
}

//按值进行修改函数(作业)
int list_update_value(LinkList L,datapype old_e,datapype new_e){
    if(NULL==L||list_empty(L)){
        printf("修改失败\n");
        return -1;
    }
    LinkList s=L->next;
    while(s->data!=old_e){
        s=s->next;
    }
    s->data=new_e;
    printf("按照值修改成功\n");
    s=NULL;
    return 0;
}

//链表的翻转(作业)
void list_reverse(LinkList L){
    

}


//链表的合并(作业)
void list_merge(LinkList L,LinkList H){
    
}
 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到