链表实验.

news2024/10/6 10:35:50

#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 的结点,则输出提示信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CLIP模型 图片问答

先简短介绍一下CLIP模型&#xff1a; CLIP (Contrastive Language–Image Pretraining) 是由 OpenAI 开发的先进的多模态视觉模型&#xff0c;结合了图像和文本处理能力。 CLIP 模型的主要特色在于它不仅可以理解图像&#xff0c;同时也能理解描述这些图像的文本。通过这样的方…

uniapp:聊天消息列表(好友列表+私人单聊)支持App、H5、小程序

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 文章简介&#xff08;效果图展示&#xff…

Python小白入门教程:手把手教你安装最新版本Anaconda及运行第一个程序

1、Anaconda是什么&#xff1f; 其实通过百度搜索就能了解到&#xff0c;再次可以看下它自己官网的介绍&#xff1a;如下 简单的说&#xff0c;它就是一个集成的管理软件&#xff0c;管理很多工具包 2、为什么安装Anaconda&#xff1f; 简单的说&#xff0c;就是为了方便&am…

QMC5883芯片I2C驱动开发指南

这个芯片纯国产挺好用的&#xff0c;电路很好设计&#xff0c;我这垃圾焊功&#xff0c;纯手焊&#xff0c;&#xff0c;居然能用。 第一部分 硬件连接 画的很简陋&#xff0c;看看就可以了。 第二部分 软件驱动 I2C的具体时序实现需要自己搞定&#xff01;&#xff01; 2…

软件设计师30--数据库系统章节回顾

软件设计师30--数据库系统章节回顾 章节重要内容考情分析 章节重要内容 考情分析

【QT+QGIS跨平台编译】056:【pdal_json_schema+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_json_schema介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_json_schema介绍 pdal_json_schema 是与 PDAL(Point Data Abstraction Library)相关的 JSON 模式文件。PDAL 是一个用于处理和分析点云数据的开源库。JSON 模式…

Win UI3开发笔记(九)关于图标Win10乱码问题

1、最开始的问题&#xff0c;winui3 gallery软件的左侧全是乱码&#xff0c;使用icon的时候&#xff0c;设置name属性出现的全是乱码&#xff0c;所以开发涉及到这部分使用Text.Glyph属性。 2、后来出现的问题&#xff0c;靠 textbox右键有各种操作&#xff0c;前面的图标乱码…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

多线程4

死锁 想获取到第二把锁&#xff0c;就需要执行完第一层大括号&#xff0c;想要执行完第一层大括号&#xff0c;就要先获取到第二层的锁。 synchronized (counter2){ synchronized (counter2){} } 例子:t2先启动&#xff0c;t2进行加锁后一定成功&#xff0c;但是如果t2进行二…

Revit模型进入虚幻引擎UE5教程

一、背景 小伙伴们是否有Revit进入虚幻引擎交互的需求呢&#xff1f; 二、实现功能 1.Revit进入虚幻UE5,包含模型属性&#xff0c;材质等 2.实现BIM构件点选&#xff0c;高亮&#xff0c;属性展示 3.实现BIM模型分层显示&#xff0c;爆炸等效果 三、教程地址 教程&#x…

JavaEE——手把手教你实现简单的 servlet 项目

文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…

“Java泛型” 得所憩,落日美酒聊共挥

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 3

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件…

【Easy云盘 | 第十三篇】分享模块(获取目录信息、获取文件信息、创建下载链接)

文章目录 4.4.7获取目录信息4.4.8获取文件信息4.4.9创建下载链接 4.4.7获取目录信息 明天做 4.4.8获取文件信息 明天做 4.4.9创建下载链接 明天做

搜索二维矩阵2 合并两个有序链表

240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int i matrix.size() - 1, j 0;while(i > 0 && j < matrix[0].size()){if(matrix[i][j…

第十一届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

第十一届蓝桥杯大赛软件赛省赛C/C 大学 B 组 文章目录 第十一届蓝桥杯大赛软件赛省赛C/C 大学 B 组1、字串排序2、门牌制作3、既约分数4、蛇形填数5、跑步锻炼6、七段码7、成绩统计8、回文日期9、子串分值和10、平面切分 1、字串排序 2、门牌制作 #include<iostream>#def…

HR都关心哪有好用的人才测评工具?

人才测评工具分为两种&#xff0c;一种是测评量表&#xff0c;一种是操作量表的工具&#xff0c;在线测评的方式没有普及之前&#xff0c;很多朋友都习惯把测评量表&#xff08;测评试题&#xff09;称为测评工具&#xff0c;其实我认为量表就是量表&#xff0c;而试试量表测评…

PET-SQL:基于大模型的两阶段Text2SQL方法

简介 PET-SQL出自论文《PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency》&#xff0c;将基于大模型的Text2SQL分为两个阶段进行&#xff0c;在第一阶段使用数据表schema信息、数据表采样数据、相似问答问答对生成初步的SQL(PreSQL)&…

linux时间同步工具chrony的配置和时间设置的相关说明

目录 目录 介绍 1.搭建ntp服务器 2.配置ntp客户端 3.其他设置 4.客户端无法进行时间同步 介绍 目前比较流行的时间同步工具有ntpd和chrony&#xff0c;ntpd采用123/UDP端口通信&#xff0c;chrony采用323/UDP端口通信。Centos7以上版本默认安装chrony服务来同步时间&#x…