链表实验.

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

// 定义单链表节点结构体
struct Node {
    int data;
    struct Node* next;
};

struct Node* initList() {
    struct Node* list = (struct Node*)malloc(sizeof(struct Node));
    list->data = 0;
    list->next = NULL;
    return list;
}

void headinsert(struct Node* list) {
    struct Node* tail = list;
    int num;
    printf("请输入整数序列(以0结束):\n");

    while (1) {
        scanf("%d", &num);
        if (num == 0) {
            break;
        }
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        newNode->data = num;
        newNode->next = NULL;
        tail->next = newNode;
        tail = newNode;
    }
}

void printList(struct Node* head) {
    printf("链表的各个元素值为:\n");
    struct Node* current = head->next; // 跳过头节点
    while (current) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int findPosition(struct Node* head, int x) {
    int position = 0;
    head = head->next;
    while (head != NULL) {
        position++;
        if (head->data == x) {
            return position;
        }
        head = head->next;
    }
    return 0;
}

void insertElement(struct Node* list, int i, int x) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = x;
    newNode->next = NULL;

    if (i <= 0) {
        newNode->next = list->next;
        list->next = newNode;
    }
    else {
        struct Node* current = list;
        int j = 0;
        while (current && j < i - 1) {
            current = current->next;
            j++;
        }
        if (current) {
            newNode->next = current->next;
            current->next = newNode;
        }
        else {
            printf("Error: Index out of range\n");
            free(newNode); // 释放新节点内存
        }
    }
}

int countnumber(struct Node* head, int x) {
    int count = 0;
    head = head->next;
    while (head != NULL) {
        if (head->data == x) {
            count++;
        }
        head = head->next;
    }
    return count;
}


int main() {
    struct Node* list = initList();
    headinsert(list);
    printList(list);

    int x = 0;
    printf("请输入要查找的元素的值:");
    scanf("%d", &x);
    int position = findPosition(list, x);
    if (position == 0) {
        printf("值为%d的元素不在链表中", x);
        printf("\n");
    }else{
        printf("值为%d的元素所在位置为%d", x, position);
        printf("\n");
    }

    int i = 0;
    int a = 0;
    printf("请输入要插入元素的值:");
    scanf("%d", &a);
    printf("请输入要插入元素的位置:");
    scanf("%d", &i);
    insertElement(list, i, a);
    printList(list);

    int b = 0;
    int number = 0;
    printf("请输入要查找元素个数的值:\n");
    scanf("%d", &b);
    number = countnumber(list, b);
    printf("值为%d的节点的个数为%d", b, number);

    return 0;
}

1. (算法设计题, 35分)设计算法实现将两个递增的带头结点有序链表合并为一个递增的有序链表,要求结果链表仍然使用原来两个链表的存储空间,表中不允许有重复的数据。

void mergeLists(struct ListNode* head1, struct ListNode* head2) {

    struct ListNode* p1 = head1->next;

    struct ListNode* p2 = head2->next;

    struct ListNode* prev = head1;

    while (p1 && p2) {

        if (p1->val < p2->val) {

            prev->next = p1;

            p1 = p1->next;

        } else if (p1->val > p2->val) {

            prev->next = p2;

            p2 = p2->next;

        } else {

            prev->next = p1; // 保留一个相同的节点

            p1 = p1->next;

            p2 = p2->next;

        }

        prev = prev->next;

    }

    if (p1)

        prev->next = p1;

    if (p2)

        prev->next = p2;

}

初始化指针 p1 和 p2 分别指向两个链表的第一个实际节点。

初始化指针 prev 指向 head1,用于追踪结果链表的最后一个节点。

循环比较两个链表的节点值,将较小的节点接入结果链表,并更新对应链表的指针。

如果两个节点值相同,只保留一个节点。

最后,将剩余未遍历完的链表直接接到结果链表的末尾。算法实现将两个递增的带头结点有序链表合并为一个递增的有序链表,结果链表仍然使用原来两个链表的存储空间,没有重复的数据。

有一个带头结点的单链表L,编写在值为x的结点之后插入m个结点的算法。

void insertAfterX(struct ListNode* head, int x, int m) {

    struct ListNode* current = head->next;

    while (current != NULL && current->val != x) {

        current = current->next;

    }

    int number=0;

    if (current != NULL) {

        for (int i = 0; i < m; i++) {

             printf("请输入要插入节点的值:\n");

             scanf("%d",&number);

            struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));

            newNode->val = number; 

            newNode->next = current->next;

            current->next = newNode;

        }

    } else {

        printf("没有找到值为%d的结点",x);

    }

}

遍历链表,寻找值为 x 的结点。

如果找到了值为 x 的结点,则在其后插入 m 个新的结点。

新插入的结点值可以简单地从 1 开始递增。

如果未找到值为 x 的结点,则输出提示信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蚁剑修改特征性信息

前言 我们首先得知道蚁剑的流量特征&#xff1a; 编码器和解码器的特征&#xff1a;蚁剑自带的编码器和解码器具有明显的特点&#xff0c;可以通过更改配置文件来达到流量加密的目的1。例如&#xff0c;蚁剑支持多种编码方式&#xff0c;如base64、chr、rot13等&#xff0c;这…

海量智库 | ANY权限原理介绍

ANY权限是Vastbase中的一种特殊的管理权限&#xff0c;用户能够通过ANY权限执行更广泛的操作&#xff0c;更加便利的管理数据库。 本文将为您介绍ANY权限管理的相关原理。 ANY权限管理相关解释 ANY权限管理&#xff0c;是对数据库内的某一类对象的所有实体进行特定的权限管理…

【C++】继承总结

一、前言 我们众所周知的C三大特性分别为&#xff1a;封装、继承、多态。 封装就是将接口实现统一化&#xff0c;隐藏那些不同的地方&#xff0c;在上层函数调用体现的方式一样&#xff0c;如各种容器的迭代器iterator&#xff0c;尽管底层实现的方式不同&#xff0c;但是在使用…

C++数据结构与算法——贪心算法简单题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

安全加固方面思路

系统层面上的加固 备份重要配置文件&#xff1a;将一些重要的系统配置文件备份&#xff0c;包括 /etc/login.defs、/etc/security/limits.conf 等等。进行账号安全加固&#xff1a;修改密码安全策略&#xff0c;设置密码存在最长时间、密码长度、密码过期提醒等。 &#xff08…

Linux设备模型统一:桥接硬件多样性与应用程序开发的关键

在Linux的宏大世界中&#xff0c;各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡&#xff0c;从嵌入式设备到强大的服务器&#xff0c;Linux需要在这些差异极大的硬件上运行。这就引出了一个问题&#xff1a;Linux是如何统一这些不同硬件的设备模型的呢&a…

Android 11 上的文件读写无权限问题

Android 6以上需要动态申请读写权限&#xff0c;但是11以上动态申请了读写权限也是无效。并且手动给予权限没有该按钮。 如上图华为钱包有个所有文件权限、但是百度地图只有仅媒体权限&#xff0c;仅媒体权限&#xff08;动态申请读写权限&#xff09;给予后软件还是没法访问文…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题&#xff0c;试过很多手段都拉不下 nacos 镜像&#xff0c;就打算在服务器装一下 …

10. 【Android教程】网格布局 GridLayout

今天要学的布局和上一节的 TableLayout 很类似&#xff0c;是在 Android 4.0 版本引入的布局方式。GridLayout 很有意思&#xff0c;自从引入之后在 Android 开发圈有以下特点&#xff1a; 大部分的开发者可能都不知道有这个布局方式的存在&#xff1b;有些开发者虽然知道&…

【智能算法】蛾群算法(MSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;AAA Mohamed等人受到飞蛾趋光行为启发&#xff0c;提出了蛾群算法&#xff08;Moth Swarm Algorithm, MSA&#xff09;。 2.算法原理 2.1算法思想 MSA设待优化问题的可行解和适…

Spring 如何优雅的灵活的Http重试

1、背景说明 在互联网时代&#xff0c; 不同系统之间大多数是通过http调用&#xff0c;调用过程中会超时、异常等过种问题。为了保证业务稳定&#xff0c;http 重试是常用方案。下面列举几种方案。 2、Http重试方案介绍 2.1 传统方案 1、使用传统的递归调用&#xff0c;实现方…

Java Lambda 表达式(详细)

Java Lambda 表达式 Lambda 的发展史 Java Lambda 表达式是在 Java 8 版本中引入的重要特性&#xff0c;它描述了一种更简洁、更灵活的方式来处理函数式编程。 在 Java 8 之前&#xff0c;要实现函数式编程&#xff0c;需要通过匿名类实现接口的方式。这样的代码通常比较冗长…

R语言数据可视化:基本绘图系统

目录 plot函数 par函数 hist函数 boxplot函数 plot函数应用实战 R语言中有三大绘图系统包括基本绘图系统&#xff0c;Lattice绘图系统&#xff0c;ggplot2绘图系统 基本绘图系统 在R语言中&#xff0c;以下函数通常用于创建和定制图形&#xff1a; plot 函数&#xff…

VMware Intel i5-10400 安装Mac 14 Sonoma

目录 安装完后的效果安装前的准备创建虚拟机创建虚拟机&#xff0c;选择典型安装。选择ISO文件选择系统类型命名虚拟机设置磁盘完成 配置虚拟机文件修改配置文件 第一次运行虚拟机选择语言选择磁盘工具格式磁盘安装macOS Sonoma 其他问题登录Apple帐户 &#xff1a; MOBILEME_C…

Unity类银河恶魔城学习记录12-7-1 p129 Craft UI - part 1源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftList.cs using System.Collections; using System.Collections.Gen…

Composer Windows 安装

Composer 的下载地址为&#xff1a;Composer 1 运行安装程序 当启动安装程序后单击下一步继续。 选择 PHP 路径 如果你的计算机上没有安装 PHP 的话&#xff0c;Composer 的安装无法继续。 你需要选择你本地安装的 PHP 路径。 配置代理地址 默认的情况下&#xff0c;可以不…

一个项目的SpringCloud微服务改造过程

SSO是公司一个已经存在了若干年的项目&#xff0c;后端采用SpringMVC、MyBatis&#xff0c;数据库使用MySQL&#xff0c;前端展示使用Freemark。今年&#xff0c;我们对该项目进行了一次革命性的改进&#xff0c;改造成SpringCloud架构&#xff0c;并且把前后端分离&#xff0c…

ES6中 Promise的详细讲解

文章目录 一、介绍状态特点流程 二、用法实例方法then()catchfinally() 构造函数方法all()race()allSettled()resolve()reject() 三、使用场景# 参考文献 一、介绍 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写

Android 14 NotificationChannels与Notification的加载流程

前言 这部分我觉得三方应用使用的较多&#xff0c;分析的时候也是源码与三方应用结合分析的。 一. NotificationChannel 的创建 在源码中&#xff0c;我看到了一个很怪的类&#xff1a;NotificationChannels.java。这个类继承了 CoreStartable。 注&#xff1a;CoreStartabl…