day20

/********************************主函数************/

#include "main.h"
int main(int argc, const char *argv[])
{
    linklistptr L=list_create();
    if(NULL==L)
    {
        return -1;
    }
    list_insert_head(L,'q');
    list_insert_head(L,'d');
    list_insert_head(L,'a');
    list_insert_head(L,'s');
    list_put(L);
    list_add(L,3,'c');
    list_put(L);
    list_insert_tail(L,'f');
    list_put(L);
    list_delete_head(L);
    list_put(L);
    list_delete_tail(L);
    list_put(L);
    list_delete_pos(L,2);
    list_put(L);
    list_reverse(L);
    list_put(L);
    list_search_vlaue(L,'a');
    list_xg(L,2,'f');
    list_put(L);
    list_zxg(L,'f','e');
    list_put(L);
    list_px(L);
    list_put(L);
    list_length(L);
    list_free(L);
    return 0;
}
/**********************************函数封装***************************/

#include "main.h"
//创建
linklistptr list_create()
{
    linklistptr L=(linklistptr)malloc(sizeof(node));
    if(NULL==L)
    {
        printf("创建失败\n");
        return NULL;
    }
    L->len=0;
    L->next=NULL;
    printf("创建成功\n");
    return L;
}
//判空
int list_empty(linklistptr L)
{
    if(NULL==L)
    {
        printf("链表不合法\n");
        return -1;
    }
    return L->next ==NULL;
}
//申请节点
linklistptr node_buy(datatype e)
{
    linklistptr p=(linklistptr)malloc(sizeof(node));
    if(NULL==p)
    {
        printf("申请失败\n");
    }
    p->data =e;
    p->next =NULL;
    return p;
}
//头插
int list_insert_head(linklistptr L,datatype e)
{
    if(NULL==L)
    {
        printf("所给链表不合法\n");
        return 0;
    }
    linklistptr p =node_buy(e);
    if(NULL==p)
    {
        return 0;
    }
    p->next = L->next;
    L->next=p;
    L->len++;
    printf("插入成功\n");
    return 1;
}
//遍历
void list_put(linklistptr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("遍历失败\n");
        return ;
    }
    linklistptr q =L->next;
    while(q!=NULL)
    {
        printf("%c\t",q->data);
        q = q->next;
    }
    putchar(10);
}
//按位置查找返回节点
linklistptr list_search_pos(linklistptr L,int pos)
{
    if(NULL==L||list_empty(L)||pos<0||pos>L->len)
    {
        printf("查找失败\n");
        return NULL;
    }
    linklistptr q =L;
    for(int i=0;i     {
        q = q->next;
    }
    return q;
}
//任意位置插入
int list_add(linklistptr L,int pos,datatype e)
{
    if(NULL==L||pos<1||pos>L->len+1)
    {
        printf("插入失败\n");
        return 0;
    }
    linklistptr p = node_buy(e);
    if(NULL==p)
    {
        return 0;
    }
    linklistptr q =list_search_pos(L,pos-1);
    p->next=q->next;
    q->next=p;
    L->len++;
    printf("插入成功\n");
    return 1;
}
//尾插/
int list_insert_tail(linklistptr L,datatype e)
{
    if(NULL==L)
    {
        printf("插入失败\n");
    }
    linklistptr p = node_buy(e);
    if(NULL==p)
    {
        return 0;
    }
    linklistptr q =list_search_pos(L,L->len);
    p->next=q->next;
    q->next=p;
    L->len++;
    printf("尾插插入成功\n");
    return 1;
}
//头删
int list_delete_head(linklistptr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("删除失败\n");
        return 0;
    }
    linklistptr p = L->next;
    L->next=p->next;
    free(p);
    p=NULL;
    L->len--;
    printf("删除成功\n");
    return 1;
}
//尾删
int list_delete_tail(linklistptr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("删除失败\n");
        return 0;
    }
    linklistptr q =list_search_pos(L,L->len-1);
    linklistptr p =q->next;
    q->next=NULL;
    free(p);
    p=NULL;
    L->len--;
    printf("删除成功\n");
    return 1;
}
//任意位置删除
int list_delete_pos(linklistptr L,int pos)
{
    if(NULL==L||list_empty(L)||pos<1||pos>L->len)
    {
        printf("删除失败\n");
        return 0;
    }
    linklistptr q =list_search_pos(L,pos-1);
    linklistptr p =q->next;
    q->next=p->next;
    free(p);
    p=NULL;
    L->len--;
    printf("删除成功\n");
    return 1;
}
//按值查找
int list_search_vlaue(linklistptr L,datatype e)
{
    if(NULL==L||list_empty(L))
    {
        printf("查找失败\n");
        return 0;
    }
    for(int i=0;ilen;i++)
    {
        if(list_search_pos(L,i)->data==e)
        {
            return i;
        }
    }
    return 0;
}
//按位置修改
int list_xg(linklistptr L,int pos,datatype e)
{
    if(NULL==L||list_empty(L)||pos<0||pos>L->len)
    {
        printf("修改失败\n");
        return 0;
    }
    linklistptr p=list_search_pos(L,pos);
    p->data=e;
    printf("修改成功\n");
    return 1;

}
//按值修改
int list_zxg(linklistptr L,datatype a,datatype e)
{
    if(NULL==L||list_empty(L))
    {
        printf("修改失败\n");
        return 0;
    }
    for(int i=1;ilen;i++)
    {
        linklistptr p=list_search_pos(L,i);
        if(p->data==a)
        {
            p->data=e;
        }
    }
    printf("修改成功\n");
}
//链表的排序
void list_px(linklistptr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("排序失败\n");
    }
    for(int i=1;ilen;i++)
    {
        datatype e=0;
        for(int j=1;jlen;j++)
        {
            linklistptr p=list_search_pos(L,j);
            if(p->data>p->next->data)
            {
                e=p->data;
                p->data=p->next->data;
                p->next->data=e;
            }
        }
    }
    printf("排序成功\n");
}
//链表的反转
void list_reverse(linklistptr L)
{
    if(NULL==L||list_empty(L)||L->len<=1)
    {
        printf("反转失败\n");
    }
    linklistptr h = L->next;
    L->next=NULL;
    linklistptr p;
    while(h!=NULL)
    {
        p=h;
        h=h->next;
        p->next=L->next;
        L->next=p;
    }
    printf("反转后\n");
}
//链表的返回长度
int list_length(linklistptr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("返回失败\n");
        return -1;
    }
    return L->len;
}
//链表的销毁
void list_free(linklistptr L)
{
    if(NULL==L)
    {
        printf("释放失败\n");
    }
    while(L->next!=NULL)
    {
        list_delete_head(L);
    }
    free(L);
    L=NULL;
    printf("释放成功\n");
}
/*********************************************头文件********************/

#ifndef _MAIN_H_
#define _MAIN_H_
#include
#include
#include
typedef char datatype;
typedef struct node
{
    union
    {
        datatype data;
        int len;
    };
    struct node *next;
}node,*linklistptr;

//创建
linklistptr list_create();
//判空
int list_empty(linklistptr L);
//申请节点
linklistptr node_buy(datatype e);
//头插
int list_insert_head(linklistptr L,datatype e);
//遍历
void list_put(linklistptr L);
//按位置查找返回节点
linklistptr list_search_pos(linklistptr L,int pos);
//尾插
int list_insert_tail(linklistptr L,datatype e);
//任意位置插入
int list_add(linklistptr L,int pos,datatype e);
//头删
int list_delete_head(linklistptr L);
//尾删
int list_delete_tail(linklistptr L);
//任意位置删除
int list_delete_pos(linklistptr L,int pos);
//按值查找
int list_search_vlaue(linklistptr L,datatype e);
//按位置修改
int list_xg(linklistptr L,int pos,datatype e);
//按值修改
int list_zxg(linklistptr L,datatype a,datatype e);
//链表的排序
void list_px(linklistptr L);
//链表的反转
void list_reverse(linklistptr L);
//链表的返回长度
int list_length(linklistptr L);
//链表的销毁
void list_free(linklistptr L);
#endif

day20_第1张图片

 

你可能感兴趣的:(数据结构)