数据结构(2-5~2-8)
2-5编写算法,在单链表中查找第一值为x的结点,并输出其前驱和后继的存储位置
#include<stdio.h>
#include<stdlib.h>typedef int DataType;
struct Node
{DataType data; struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *LinkList; LinkList SetNullList_Link() //设置头结点
{LinkList head = (LinkList)malloc(sizeof(struct Node));if (head != NULL) head->next = NULL;else printf("alloc failure");return head;
}void CreateList_Tail(struct Node* head)//利用尾插法
{PNode p = NULL;PNode q = head;DataType data;scanf("%d", &data);while (data != -1){ p = (struct Node*)malloc(sizeof(struct Node));p->data = data;p->next = NULL;q->next = p;q = p;scanf("%d", &data);}
}
int Inserch_num(LinkList head,int x)//找值
{LinkList p;int i=0;p=head->next;while(p)//把前后特殊情况单列出来 {if(i==0&&p->data==x){printf("The Prodrove node is head,the position of the rear node is at position 2 of the linked list\n");return 0;}if(p->data==x&&p->next==NULL){printf("The Prodrove node is %d,there is no rear node\n ",i);return 0;}if(p->data==x){printf("The Prodrove node is %d,he rear node is %d\n",i,i+2); return 0;}i++;p = p->next;}return 0;
}
void print(LinkList head) //打印
{PNode p = head->next;while (p){printf("%d ", p->data);p = p->next;}
}
void DestoryList_Link(LinkList head) //销毁链表
{PNode pre = head; PNode p = pre->next;while (p){free(pre);pre = p;p = pre->next;}free(pre);
}int main()
{LinkList head = NULL;int x=0,a=0;head = SetNullList_Link();CreateList_Tail(head);print(head);printf("\n");printf("Please input the number you find:");scanf("%d",&x);a=x;Inserch_num(head,a);DestoryList_Link(head);return 0;
}

2-6在单循环链表中,编写算法实现将链表中数据域为奇数的结点移至表头,将链表中数据域为偶数的结点移至表尾
#include<stdio.h>
#include<stdlib.h>typedef int DataType;
struct Node {DataType data; struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *LinkList; LinkList CreateList_Tail_loop()
{LinkList head = (LinkList)malloc(sizeof(struct Node));PNode cur = NULL;PNode tail = head;DataType data;scanf("%d", &data);while (data != -1){ cur = (struct Node*)malloc(sizeof(struct Node));cur->data = data;tail->next = cur;tail = cur;scanf("%d", &data);}tail->next = head;return tail;
}
PNode Move_Odd_Even(LinkList tail)
{PNode head=tail->next,pre=head->next,q=pre->next;PNode pre1,head1=(PNode)malloc(sizeof(struct Node));PNode pre2,head2=(PNode)malloc(sizeof(struct Node));pre1=head1;pre2=head2;while(q!=head->next){if(pre->data%2==0){pre->next=pre1->next;pre1->next=pre;pre1=pre;}else{pre->next=pre2;pre2->next=pre;pre2=pre;}pre=q;q=q->next;}
head1=head1->next;
pre2->next=head1;
pre1->next=head2;
return pre1;
}
void print(LinkList tail)
{PNode head = tail->next;PNode p = head->next;while (p != head){printf("%d ", p->data);p = p->next;}
}void DestoryList_Link(LinkList tail)
{PNode pre = tail->next;PNode p = pre->next;while (p != tail){free(pre);pre = p;p = pre->next;}free(pre);free(tail);
}int main()
{LinkList tail = NULL;LinkList p = NULL;tail = CreateList_Tail_loop();p = Move_Odd_Even(tail);print(p);DestoryList_Link(tail);return 0;
}

2-7将两个有序线性表LIST1=(a1,a2,…,an)和LIST2=(b1,b2,…,bn)链接成一个有序线性链表LIST3,并删除LIST3链表中相同的结点,即链接中若有多个结点具有相同的数据域,只保留一个结点,使得顺序表中所有结点的数据域都不相同。在采用顺序表和单链表两种形式下分别设计算法实现上述功能
#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100void mergeAndRemoveDuplicates(int list1[], int list2[], int n1, int n2, int list3[]) {int i = 0, j = 0, k = 0;while (i < n1 && j < n2) {if (list1[i] < list2[j]) {list3[k] = list1[i];i++;k++;} else if (list1[i] > list2[j]) {list3[k] = list2[j];j++;k++;} else { // 相同元素list3[k] = list1[i];i++;j++;k++;}}while (i < n1) {list3[k] = list1[i];i++;k++;}while (j < n2) {list3[k] = list2[j];j++;k++;}
}void removeDuplicates(int list[], int size) {int i, j, k;for (i = 0; i < size; i++) {for (j = i + 1; j < size;) {if (list[j] == list[i]) {for (k = j; k < size - 1; k++) {list[k] = list[k + 1];}size--;} else {j++;}}}
}int main() {int i = 0; int list1[] = {1, 2, 3, 5, 7};int list2[] = {3, 4, 5, 6, 8};int n1 = sizeof(list1) / sizeof(list1[0]);int n2 = sizeof(list2) / sizeof(list2[0]);int list3[MAX_SIZE];mergeAndRemoveDuplicates(list1, list2, n1, n2, list3);removeDuplicates(list3, n1 + n2);printf("Merged and duplicates removed list: ");for ( i = 0; i <8; i++) {printf("%d \n", list3[i]);}printf("\n");return 0;
}

#include <stdio.h>
#include <stdlib.h>struct ListNode {int val;struct ListNode* next;
};struct ListNode* createNode(int val) {struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));newNode->val = val;newNode->next = NULL;return newNode;
}struct ListNode* mergeAndRemoveDuplicates(struct ListNode* list1, struct ListNode* list2) {struct ListNode* p = list1;struct ListNode* q = list2;struct ListNode* list3 = NULL; // 指向结果链表的头节点struct ListNode* tail = NULL; // 指向结果链表的尾节点while (p && q) {if (p->val < q->val) {// 若当前元素小于另一个表的当前元素,则将当前元素插入到结果链表中if (list3 == NULL) {list3 = tail = createNode(p->val);} else {tail->next = createNode(p->val);tail = tail->next;}p = p->next;} else if (p->val > q->val) {// 若当前元素大于另一个表的当前元素,则将当前元素插入到结果链表中if (list3 == NULL) {list3 = tail = createNode(q->val);} else {tail->next = createNode(q->val);tail = tail->next;}q = q->next;} else { // 相同元素,只保留一个if (list3 == NULL) {list3 = tail = createNode(p->val);} else {tail->next = createNode(p->val);tail = tail->next;}p = p->next;q = q->next;}}// 将剩余的元素插入结果链表中while (p) {tail->next = createNode(p->val);tail = tail->next;p = p->next;}while (q) {tail->next = createNode(q->val);tail = tail->next;q = q->next;}// 删除结果链表中重复的元素struct ListNode* cur = list3;while (cur && cur->next) {if (cur->val == cur->next->val) {struct ListNode* temp = cur->next;cur->next = cur->next->next;free(temp);} else {cur = cur->next;}}return list3;
}void printList(struct ListNode* head) {struct ListNode* cur = head;while (cur != NULL) {printf("%d ", cur->val);cur = cur->next;}printf("\n");
}int main() {struct ListNode* list1 = createNode(1);list1->next = createNode(2);list1->next->next = createNode(3);list1->next->next->next = createNode(5);list1->next->next->next->next = createNode(7);struct ListNode* list2 = createNode(3);list2->next = createNode(4);list2->next->next = createNode(5);list2->next->next->next = createNode(6);list2->next->next->next->next = createNode(8);struct ListNode* list3 = mergeAndRemoveDuplicates(list1, list2);printf("Merged and duplicates removed list: ");printList(list3);// 释放链表的内存空间struct ListNode* temp;while (list3) {temp = list3;list3 = list3->next;free(temp);}return 0;
}

2-8设双链表中的结点包括4个部分:前驱指针llink,后继指针rlink,数据域data,访问频度freq,初始时将各结点的freq设置为0。当对某结点访问时使该结点的freq增加1,并且将链表按照访问freq递减的顺序进行排序。请编写算法实现以上功能
#include <stdio.h>
#include <stdlib.h>struct DoubleListNode {int data;int freq;struct DoubleListNode* llink;struct DoubleListNode* rlink;
};struct DoubleListNode* createNode(int data) {struct DoubleListNode* newNode = (struct DoubleListNode*)malloc(sizeof(struct DoubleListNode));if (newNode == NULL) {printf("Memory allocation failed.\n");exit(1);}newNode->data = data;newNode->freq = 0;newNode->llink = NULL;newNode->rlink = NULL;return newNode;
}void insertNode(struct DoubleListNode** head, int data) {struct DoubleListNode* newNode = createNode(data);if (*head == NULL) {*head = newNode;return;}// 插入到链表头部newNode->rlink = *head;(*head)->llink = newNode;*head = newNode;
}void increaseFreq(struct DoubleListNode** head, int data) {if (*head == NULL) {return;}struct DoubleListNode* cur = *head;while (cur != NULL) {if (cur->data == data) {cur->freq++;// 调整链表顺序struct DoubleListNode* prev = cur->llink;while (prev != NULL && prev->freq < cur->freq) {struct DoubleListNode* next = cur->rlink;if (prev->llink) {prev->llink->rlink = cur;}cur->llink = prev->llink;cur->rlink = prev;prev->llink = cur;if (next) {next->llink = prev;}prev->rlink = next;prev = cur->llink;}break;}cur = cur->rlink;}
}void printList(struct DoubleListNode* head) {struct DoubleListNode* cur = head;while (cur != NULL) {printf("(%d,%d) ", cur->data, cur->freq);cur = cur->rlink;}printf("\n");
}void freeList(struct DoubleListNode* head) {struct DoubleListNode* cur = head;while (cur != NULL) {struct DoubleListNode* temp = cur;cur = cur->rlink;free(temp);}
}int main() {struct DoubleListNode* head = NULL;insertNode(&head, 3);insertNode(&head, 5);insertNode(&head, 2);insertNode(&head, 8);printf("Original list: ");printList(head);increaseFreq(&head, 2);increaseFreq(&head, 5);increaseFreq(&head, 3);printf("Updated list: ");printList(head);// 释放链表的内存空间freeList(head);return 0;
}

相关文章:
数据结构(2-5~2-8)
2-5编写算法,在单链表中查找第一值为x的结点,并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …...
浅谈智能安全配电装置在老年人建筑中的应用
摘要:我国每年因触电伤亡人数非常多,大多数事故是发生在用电设备和配电装置。在电气事故中,无法预料和不可抗拒的事故是比较少的,大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…...
【ES】笔记-ES6模块化
暴露数据引入模块语法 规范基本语法分别暴露 (按需暴露)统一暴露 export {暴露内容1,暴露内容2}默认暴露 (适合只暴露一个数据) 只能暴露一次同时使用在app.js中引入 规范 每个文件都是一个模块要借助Babel和Browserify依次编译代码,才能在浏览器端运行…...
阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可
作为下一代CDN产品面世的腾讯云EdgeOne,历时一年服务,腾讯云国际站凭借安全加速一体化的解决方案,用All in One 架构构筑边缘应用无限想象。 近年来,随着5G网络、物联网、边缘计算的快速发展,爆炸式增长的数据量和市场…...
AIGC AI绘画 Midjourney 的详细使用手册
Midjourney参数提示与用法。 常见的命令有: --seed:种子值 --q:品质 --c:混乱 --no:负面提示 --iw:权重(0.5-2) ::(多重提示) -- repeat(重复) --stop(停止) --title(无缝贴图:适用于模型版本 1、2、3、5) --video(过程动画,适用于模型版本 1、2…...
Lua系列文章(1)---Lua5.4参考手册学习总结
windows系统上安装lua,下载地址: Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程, 面向对…...
Leetcode.121 买卖股票的最佳时机
题目链接 Leetcode.121 买卖股票的最佳时机 esay 题目描述 给定一个数组 p r i c e s prices prices ,它的第 i i i 个元素 p r i c e s [ i ] prices[i] prices[i] 表示一支给定股票第 i i i 天的价格。 你只能选择 某一天 买入这只股票,并选择在…...
IDE相关设置和插件
https://www.jetbrains.com/zh-cn/webstorm/ 一、插件 Chinese (Simplified) Language Pack:中文语言包Translation:翻译插件,需要申请国内翻译软件应用,可以搜索translations配置快捷键any-rule:正侧插件&#…...
nodejs之jsdom插件,运行浏览器环境
https://www.npmjs.com/package/jsdom 一、安装依赖 npm install jsdom二、用法 var jsdom require(jsdom) var { JSDOM } jsdom; var dom new JSDOM(<!DOCTYPE html><html lang"cn"><head></head><body></body></htm…...
运行vite项目报错:await import(‘source-map-support‘).then((r) => r.default.install())
项目场景: Electron vue3 vite项目实现屏幕截图功能 问题描述 运行 npm run dev 启动项目报错 await import(source-map-support).then((r) > r.default.install()) PS D:\study\electron\electronDemo> npm run dev> electronDemo0.0.1 dev D:\study…...
【GIT版本控制】--安装GIT
一、在不同操作系统上安装GIT 在不同操作系统上安装GIT非常容易,以下是针对不同操作系统的安装步骤: 在Windows上安装GIT: 访问 Git官方网站。下载适合您Windows版本的GIT安装程序(32位或64位)。运行下载的安装程序。…...
java 常见api Arrays类
int类型数组 package daysreplace;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arrays{38,24,42,56,22,44};//直接输出数组名称就是内存地址System.out.println(arrays);//Arrays.toString()会将数组内容转成字符串形式System…...
Java常见设计模式
单例模式:程序自始至终只创建一个对象。 应用场景:1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案: 双重检查加锁机…...
Hive 【Hive(七)窗口函数练习】
窗口函数案例 数据准备 1)建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2)装载语句 i…...
C++深入学习part_1
Linux下编译C程序 安装g命令:sudo apt install g 编译命令:$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到: namespace命名空间 首先,命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下࿱…...
leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展
300. 最长递增子序列 - 力扣(LeetCode) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如ÿ…...
Spring加载后置处理器方式之模板方法
Spring加载后置处理器方式之模板方法 1. 未使用模板方法时2. 使用模板方法后 1. 未使用模板方法时 public static void main(String[] args) {MyBeanFactory myBeanFactory new MyBeanFactory();myBeanFactory.getBean();}static class MyBeanFactory {public Object getBean(…...
【高性能计算】CUDA编程之OpenCV的应用(教程与代码-4)//test error
imread命令将返回以蓝色、绿色和红色(BGR格式)开头的三个通道 处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU CUDA模块中的函数都定义在cv::cuda命名空间中,将设备上配置给图像数据用的显存块作为其参数。 gettickcount…...
高德地图行政区域四级级联数据拉取;省市区县乡镇级联数据
高德地图行政区域四级级联数据拉取 高德地图行政区域级联选择 高德地图行政区域级联选择 使用以下代码拉取高德官方省市区县乡镇四级级联数据 function p(name/* 行政区域名称 */){return $.ajax({"url": "https://lbs.amap.com/_AMapService/v3/config/dis…...
Qt_基础
目录 1概述1.1 什么是QT1.2 QT的发展史1.3 支持的平台1.4 QT版本1.5 下载与安装1.6 QT的优点1.7 成功案例 2 创建 Qt 项目2.1 使用向导创建2.2 .pro文件2.3 帮助文档(QTcreator自带的)2.4 QT应用程序介绍 3 创建第一个小程序3.1 按钮的创建3.1.1 设置主窗口标题的函数3.1.2 **固…...
OpenClaw多模型切换技巧:GLM-4.7-Flash与Qwen3-32B混合调用实战
OpenClaw多模型切换技巧:GLM-4.7-Flash与Qwen3-32B混合调用实战 1. 为什么需要多模型切换 去年冬天,当我第一次尝试用OpenClaw自动处理周报时,发现一个有趣的现象:用同一个模型处理文本摘要和代码片段时,效果差异很大…...
JavaScript动态交互:在网页中实时调整参数并预览LiuJuan生成效果
JavaScript动态交互:在网页中实时调整参数并预览LiuJuan生成效果 你是不是也遇到过这种情况?想用AI模型生成图片,但每次调整参数都要在代码里改来改去,然后重新运行脚本,等半天才能看到效果。整个过程就像在开盲盒&am…...
告别无脑抄payload:手把手教你分析RCE-labs靶场PHP源码,自己构造利用链
从源码审计到漏洞利用:深度解析RCE靶场中的PHP代码逻辑 在安全研究领域,真正区分新手与专家的关键能力,往往不是掌握多少现成的攻击载荷(payload),而是能否通过源码审计独立发现漏洞并构造利用链。本文将带…...
智慧医疗泡罩药板药片缺失缺陷检测数据集VOC+YOLO格式1300张3类别
注意数据集中图片大约500张是原图剩余为增强图片数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1300标注数量(xml文件个数):1300…...
Qwen3.5小尺寸模型开源,9B碾压GPT开源版,消费级显卡就能跑
AI圈又出大新闻了✨ 阿里通义千问3.5系列小尺寸模型正式亮相,直接打破“小模型能力弱”的固有认知,甚至实现了“以小胜大”的逆袭,本地部署门槛直接拉到平民级! 先上核心干货——这次千问3.5一口气推出了4款小尺寸模型,…...
Mojo+Python混合项目部署失败全记录(含完整错误日志溯源与跨运行时调试手册)
第一章:MojoPython混合项目部署失败全记录(含完整错误日志溯源与跨运行时调试手册)在将 Mojo 模块嵌入 Python 3.11 环境的 CI/CD 流水线中,首次构建即触发运行时崩溃。核心现象为 mojo_runtime_init() 在 Python 进程内调用后立即…...
电动汽车工程师视角:碳化硅模块在电驱系统中的应用实战(含热管理设计)
碳化硅功率模块在电动汽车电驱系统中的工程实践 当一辆搭载碳化硅逆变器的电动汽车从静止加速到100km/h时,功率模块内部的温度变化可能超过100℃。这种极端工况正是第三代半导体材料大显身手的舞台。作为参与过多个量产项目的电驱系统工程师,我想分享一些…...
别再只盯着find了!Linux系统隐藏文件和进程的5种“花活”与排查指南
Linux系统隐匿技术深度解析:从防御视角看5种高级隐藏手法与实战排查 在Linux系统安全领域,攻击者与防御者的博弈从未停止。当普通管理员还在使用ls和ps检查系统时,高级攻击者早已掌握多种隐匿技术。本文将揭示五种超越常规认知的隐藏手法&…...
Transformer在车道线检测中的实战应用:LSTR模型从理论到代码实现
Transformer在车道线检测中的实战应用:LSTR模型从理论到代码实现 自动驾驶技术的快速发展对车道线检测提出了更高要求。传统基于CNN的分割方法往往需要复杂的后处理流程,而LSTR(Lane Shape Prediction with Transformers)通过端到…...
Arduino轻量级哈希表UnorderedMap实战指南
1. 项目概述UnorderedMap是一款专为 Arduino 平台设计的轻量级哈希表(Hash Table)实现,其核心目标是在资源极度受限的微控制器环境中提供高效、可靠、内存可控的键值对(Key-Value Pair)存储能力。它并非 C STLstd::uno…...
