鱼C论坛

 找回密码
 立即注册
查看: 671|回复: 0

[作品展示] S1E47:单链表3--笔记

[复制链接]
发表于 2023-12-14 12:16:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 BaysideLizard 于 2023-12-14 12:20 编辑
#include <stdio.h>
#include <stdlib.h>
//鱼C论坛——BaysideLizard写于2023年12月14日

struct Numbers
{
    int value;
    struct Numbers *next;
};

void insertNumbers(struct Numbers **headNumbers,int value);
void printNumbers(struct Numbers *headNumbers);
void delNumbers(struct Numbers **headNumbers,int num);

int main()
{
    struct Numbers *headNumbers = NULL;
    int num;

    printf("单链表插入实验\n");
    while(1)
    {
        printf("请输入一个整数(输入-1表示结束):");
        scanf("%d",&num);
        if(num == -1)
        {
            break;
        }

        insertNumbers(&headNumbers,num);
        printNumbers(headNumbers);
    }
    printf("单链表删除实验\n");
    while(1)
    {
        printf("请输入您要删除的整数(输入-1表示结束):");
        scanf("%d",&num);
        if(num == -1)
        {
            break;
        }

        delNumbers(&headNumbers,num);
        printNumbers(headNumbers);
    }

    return 0;
}

void insertNumbers(struct Numbers **headNumbers,int value)
{
    struct Numbers *previous,*current,*nw;
    current = *headNumbers;
    previous = NULL;

    while(current != NULL && current->value < value)
    {
        previous = current;
        current = current -> next;
    }

    nw = (struct Numbers *)malloc(sizeof(struct Numbers));

    if(nw == NULL)
    {
        printf("内存分配失败!\n");
        exit(1);
    }

    nw->next = current;
    nw->value = value;

    if(previous == NULL)
    {
        *headNumbers = nw;
    }
    else
    {
        previous->next = nw;
    }
}

void printNumbers(struct Numbers *headNumbers)
{
    struct Numbers *current;

    current = headNumbers;
    while(current != NULL)
    {
        printf("%d ",current->value);
        current = current->next;
    }
    putchar('\n');
}

void delNumbers(struct Numbers **headNumbers,int value)
{
    struct Numbers *previous,*current;

    current = *headNumbers;
    previous = NULL;

    while(current != NULL && current->value != value)
    {
        previous = current;
        current = current->next;
    }

    if(current == NULL)
    {
        printf("找不到匹配的节点!\n");
        return ;
    }
    else
    {
        if(previous == NULL)
        {
            *headNumbers = current->next;
        }
        else
        {
            previous->next = current->next;
        }

        free(current);
    }
}








运行结果:
单链表插入实验
请输入一个整数(输入-1表示结束):1
1
请输入一个整数(输入-1表示结束):3
1 3
请输入一个整数(输入-1表示结束):5
1 3 5
请输入一个整数(输入-1表示结束):7
1 3 5 7
请输入一个整数(输入-1表示结束):8
1 3 5 7 8
请输入一个整数(输入-1表示结束):-1
单链表删除实验
请输入您要删除的整数(输入-1表示结束):5
1 3 7 8
请输入您要删除的整数(输入-1表示结束):1
3 7 8
请输入您要删除的整数(输入-1表示结束):7
3 8
请输入您要删除的整数(输入-1表示结束):0
找不到匹配的节点!
3 8
请输入您要删除的整数(输入-1表示结束):1
找不到匹配的节点!
3 8
请输入您要删除的整数(输入-1表示结束):-1

Process returned 0 (0x0)   execution time : 23.509 s
Press any key to continue.








在FishC学C的第26天

评分

参与人数 1贡献 +3 收起 理由
zhangjinxuan + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表