栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单链表练习()

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单链表练习()

#include 
#include 
#include 
#include 
typedef struct List{
    long long n;
    char cn[100];
    char an[100];
    struct List *next;
}AnimeList;
AnimeList *Creat(int n);//创建链表
AnimeList *ListSort(AnimeList *p);//链表排序按照从小到大的顺序,返回的是排序后链表的首地址,
AnimeList *ListPartFind(AnimeList *p,int n);//返回第N项的地址
void Insert(AnimeList *p);//添加节点
void Change(AnimeList *p);//改变节点数据
void Delete(AnimeList *p);//删除节点(选择删除)
void Delete_P(AnimeList *p,int n);//删除第N项节点
void PrintList(AnimeList *P);//输出(自选)
void ListSearch(AnimeList *p);//按照条件搜索
void CopyListPart(AnimeList *a,AnimeList *b);//复制后面给前面
int ListSearchMin(AnimeList *p);//寻找最小学号的是第几项
int ListLength(AnimeList *p);//返回链表长度
int main(){
    int n;
    scanf("%lld",&n);
    AnimeList *p=Creat(n);
    int t;
    PrintList(p);
    p=ListSort(p);
    PrintList(p);
    return 0;
}
AnimeList *Creat(int n){
    AnimeList *head,*end,*node;
    head=(AnimeList *)malloc(sizeof(AnimeList));
    end=head;
    int i=0;
    while(i++n);
        printf("请输入动漫名n");
        scanf("%s",&node->an);
        printf("请输入角色名n");
        scanf("%s",&node->cn);
        printf("创建完成,数据存储成功nn");
        end->next=node;
        end=node;
    }
    end->next=NULL;
    return head;
}
int ListLength(AnimeList *p){
    AnimeList *node=p->next;
    int t=0;
    while(node!=NULL){
        t++;
        node=node->next;
    }
    return t;
}
void Insert(AnimeList *p){
    AnimeList *node=p,*end;
    printf("请选择在第几项插入n");
    int n,i=0;
    char c;
    scanf("%lld",&n);
    printf("请选择前插还是后插n前插(1)n后插(2)n");
    getchar();
    while(1){ 
        i=0;
    scanf("%c",&c);
    if(c=='1'){
        i=1;
        while(inext;
            i++;
        }
        end=(AnimeList *)malloc(sizeof(AnimeList));
        printf("请输入动漫编号n");
        scanf("%lld",&end->n);
        printf("请输入动漫名n");
        scanf("%s",&end->an);
        printf("请输入角色名n");
        scanf("%s",&end->cn);
        printf("创建完成,数据存储成功nn");
        end->next=node->next;
        node->next=end;
        break;
    }
    else if(c=='2'){
        while(i++next;
        end=(AnimeList *)malloc(sizeof(AnimeList));
        printf("请输入动漫编号n");
        scanf("%lld",&end->n);
        printf("请输入动漫名n");
        scanf("%s",&end->an);
        printf("请输入角色名n");
        scanf("%s",&end->cn);
        printf("创建完成,数据存储成功nn");
        end->next=node->next;
        node->next=end;
        break;
    }
    else
    printf("输入错误,请重新输入n");
    }
}
void PrintList(AnimeList* P){
    int n,i;
    AnimeList* p=P;
    char c;
    getchar();
    while(1){
        printf("请选择n输出特定单项(1)n输出全部(2)n");
        scanf("%c",&c);
        if(c=='1'){
            i=0;
            printf("要输出第几项?n");
            scanf("%lld",&n);
            while(inext;
            i++;}
            printf("编号:%lldn动漫名称:%sn角色名称:%sn",p->n,p->an,p->cn);
            break;
        }
       else if(c=='2'){
           p=p->next;
           while(p!=NULL){
               printf("编号:%lldt动漫名称:%st角色名称:%sn",p->n,p->an,p->cn);
               p=p->next;
           }
           break;
       }
       else
       printf("输入错误,请重新输入n");
    }
}
void Change(AnimeList *p){
    AnimeList *node=p;
    int n,i=0;
    printf("现在一共有%lld项,要改哪个?n",ListLength(p));
    scanf("%lld",&n);
    while(inext;
        i++;
    }
    while(1){
        printf("请选择要改的地方n1)编号t2}动漫名称t3}角色名n");
        scanf("%lld",&n);
        if(n==1){
        scanf("%lld",&node->n);
        break;}
        else if(n==2){ 
        scanf("%s",&node->an);
        break;}
        else if(n==3){ 
        scanf("%s",&node->cn);
        break;}
        else
        printf("输入错误,请重新输入n");
    }
}
void Delete(AnimeList *p){
    AnimeList *node=p,*end;
    int n,i=0;
    printf("现在有%d项,你要删除第几项?n",ListLength(p));
    scanf("%lld",&n);
    while(inext;
        i++;
    }
    end=node->next;
    node->next=end->next;
    free(end);
}
void ListSearch(AnimeList *p){
    AnimeList *node=p;
    printf("请选择搜索方式n1)按照编号2)按照动漫名3)按照角色名n");
    int i,n,t=0,s;
    char a[100];
    while(1){
        scanf("%lld",&n);
        if(n==1){
            printf("请输入要搜索的编号n");
            scanf("%lld",&s); 
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(node->n==s){
                    printf("找到了,是第%d项n",t);
                    break;
                }
            }
                if(node->next==NULL)
                printf("没找到n");
                break;
        }
        else if(n==2){
            printf("请输入要搜索的动漫名n");
            scanf("%s",&a);
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(strcmp(node->an,a)==0){
                    printf("找到了,是第%d项n",t);
                    break;
                }
            }
            if(node->next==NULL){
                printf("没找到n");
            }
            break;
        }
        else if(n==3){
            printf("请输入要搜索的角色名n");
            scanf("%s",&a);
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(strcmp(node->cn,a)==0){
                    printf("找到了,是第%d项n",t);
                    break;
                }
            }
            if(node->next==NULL){
                printf("没找到n");
            }
            break;
        }
        else
        printf("输入错误,请重新输入n");
    }
}
int ListSearchMin(AnimeList *p){
    int i=1,index=1;
    AnimeList *head=p->next;
    long long  r=head->n;
    while(head->next!=NULL){
        head=head->next;
        i++;
        if(head->nn=b->n;
    strcpy(a->cn,b->cn);
    strcpy(a->an,b->an);
}
AnimeList *ListPartFind(AnimeList *p,int n){
    p=p->next;
    int i=1;
    while(inext;
        i++;
    }
    return p;
}
void Delete_P(AnimeList *p,int n){
    AnimeList *node=p,*end;
    int i=0;
    while(inext;
        i++;
    }
    end=node->next;
    node->next=end->next;
    free(end);
}
AnimeList *ListSort(AnimeList *p){
    AnimeList *head_o=p,*node,*end,*head,*min;
    head=(AnimeList *)malloc(sizeof(AnimeList));
    end=head;
    int t=ListLength(p);
    int i=0;
    int m;
    while(p->next!=NULL){
        node=(AnimeList *)malloc(sizeof(AnimeList));
        m=ListSearchMin(p);
        min=ListPartFind(p,m);
        CopyListPart(node,min);
        Delete_P(p,m);
        end->next=node;
        end=node;
    }
    end->next=NULL;
    return head;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号