C语言的链表—完整代码

Posted 繁凡さん

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的链表—完整代码相关的知识,希望对你有一定的参考价值。

链表完整代码。经测试,应该没什么毛病

#include<stdio.h>
#include<malloc.h>
#include<string.h>

typedef struct student
    int score;//数据域;
    struct student *next;//指针域;
Linklist;

Linklist *creat(int n)//创建链表

    Linklist *head,*node,*end;
    head=(Linklist*)malloc(sizeof(Linklist));
    end=head;
    for(int i=0;i<n;i++)
    
        node=(Linklist*)malloc(sizeof(Linklist));
        scanf("%d",&node->score);
        end->next=node;
        end=node;
    
    end->next=NULL;
    return head;

void change(Linklist*list,int n)//修改链表
//n是要修改的第n个节点,因为链表只能顺序访问不能随机访问,不好用,学这个用来入门数据结构

    Linklist*t=list;
    int i=0;
    while(i<n&&t!=NULL)//往后移去找第N个节点
    
        t=t->next;
        i++;
    
    if(t!=NULL)
    
        puts("快点地,输入要修改的值");
        scanf("%d",&t->score);
        printf("修改成功\\n");
    
    else puts("节点不存在哟");

void delet(Linklist*list,int n)//删除链表中的值

    Linklist *t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    
        in=t;//in指向的一直是现在t所指向的上一个(先让in指向t,再让t指向下一个)
        t=t->next;
        i++;
    
    if(t!=NULL)
    
        in->next=t->next;//要删除t,让指向它的指针指向下一个,跳过t就是删除了t;
        free(t);//清除t的内存;
    
    else puts("节点不存在!请以后再来探索吧");

void insert (Linklist*list,int n)//插入链表    (在第n位之后插入值(插完之后是第n+1位))

    Linklist*t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    
        t=t->next;//先找到要插入的位置
        i++;
    
    if(t!=NULL)
    
        in=(Linklist*)malloc(sizeof(Linklist));
        puts("请输入要插入的值:");
        scanf("%d",&in->score);
        in->next=t->next;
        t->next=in;
        puts("插进去了呢");
    
    else puts("节点不存在,你别玩我呀");

void coutlist(Linklist*head)//输出链表的值;

    while(head->next!=NULL)
    
        head=head->next;
        printf("%d ",head->score);
    
    printf("\\n");

void coutlength(Linklist*list)//输出链表的长度(带头结点)

    Linklist*t=list;//非空表的情况下指向的是第一个结点而不是头结点
    int ans=0;
    while(t->next)
    
        t=t->next;
        ans++;
    
    printf("%d\\n",ans);

void find(Linklist*lists,int x)//按值查找w

    Linklist* t=lists->next;
    while(t!=NULL&&t->score!=x)
        t=t->next;
    if(t!=NULL)printf("太棒了,找到了呢\\n");
    return ;

void list()//控制面板

    printf("这是一个单链表\\n------------------------------------------\\nPlease press the button:\\n");
    printf("Button 1 ---> 创建单链表\\n");				//创建单链表 (带头结点、表尾插入)
    printf("Button 2 ---> 获取链表长度\\n");				//获取链表长度
    printf("Button 3 ---> 插入结点\\n");				//按序号查找
    printf("Button 4 ---> 按值查找\\n");				//按值查找
    printf("Button 5 ---> 删除结点\\n");		//插入结点
    printf("Button 6 ---> 修改节点\\n");				//删除结点
    printf("Button 7 ---> 输出链表的值\\n");							//遍历链表
    printf("Button 8 ---> Exit the program\\n-----------------------------------\\n");					//退出程序


int main()

    list();
    Linklist*h;
    int n,x,m;
    while(true)
    
        scanf("%d",&n);
        if(n==1)
        
            printf("请输入一个数字,创建长度为n的链表:\\n请输入要加入链表的数:");
            scanf("%d",&x);
            h=creat(x);
            printf("Please press the button:\\n");
        
        if(n==2)
        
            printf("单链表的长度是:");
            coutlength(h);
            printf("Please press the button:\\n");
        
        if(n==3)
        
            printf("你想插到哪儿?(手动滑稽)");
            scanf("%d",&x);
            insert (h,x);
            printf("Please press the button:\\n");
        
        if(n==4)
        
            printf("请输入你要找的值");
            scanf("%d",&m);
            find(h,m);
            printf("Please press the button:\\n");
        
        if(n==5)
        
            printf("你敢删谁?有种你试试!\\n");
            scanf("%d",&x);
            delet(h,x);
            printf("还真敢呐,太顶了!\\n");
            printf("Please press the button:\\n");
        
        if(n==6)
        
            printf("你要改那个值?");
            scanf("%d",&x);
            change(h,x);
            printf("Please press the button:\\n");
        
        if(n==7)
        
            coutlist(h);
            printf("Please press the button:\\n");
        
        if(n==8)
        
            printf("拜拜了您呐\\n");
            return 0;
        
    
    return 0;

以上是关于C语言的链表—完整代码的主要内容,如果未能解决你的问题,请参考以下文章

将两个排好序的链表结合成一个有序的链表-附C语言代码

[ 链表OJ题--C语言实现 ] 复制带随机指针的链表(带视频讲解哦)

c语言链表的创建

在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?

Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出

C语言写的链表。明明没有错误,为啥编译器还会报错,?而且还爆出100+的错误,求解。