当前位置: 首页 > news >正文

数据结构(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编写算法&#xff0c;在单链表中查找第一值为x的结点&#xff0c;并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …...

浅谈智能安全配电装置在老年人建筑中的应用

摘要&#xff1a;我国每年因触电伤亡人数非常多&#xff0c;大多数事故是发生在用电设备和配电装置。在电气事故中&#xff0c;无法预料和不可抗拒的事故是比较少的&#xff0c;大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…...

【ES】笔记-ES6模块化

暴露数据引入模块语法 规范基本语法分别暴露 (按需暴露)统一暴露 export {暴露内容1&#xff0c;暴露内容2}默认暴露 (适合只暴露一个数据) 只能暴露一次同时使用在app.js中引入 规范 每个文件都是一个模块要借助Babel和Browserify依次编译代码&#xff0c;才能在浏览器端运行…...

阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可

作为下一代CDN产品面世的腾讯云EdgeOne&#xff0c;历时一年服务&#xff0c;腾讯云国际站凭借安全加速一体化的解决方案&#xff0c;用All in One 架构构筑边缘应用无限想象。 近年来&#xff0c;随着5G网络、物联网、边缘计算的快速发展&#xff0c;爆炸式增长的数据量和市场…...

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,下载地址&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程&#xff0c; 面向对…...

Leetcode.121 买卖股票的最佳时机

题目链接 Leetcode.121 买卖股票的最佳时机 esay 题目描述 给定一个数组 p r i c e s prices prices &#xff0c;它的第 i i i 个元素 p r i c e s [ i ] prices[i] prices[i] 表示一支给定股票第 i i i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在…...

IDE相关设置和插件

https://www.jetbrains.com/zh-cn/webstorm/ 一、插件 Chinese ​(Simplified)​ Language Pack&#xff1a;中文语言包Translation&#xff1a;翻译插件&#xff0c;需要申请国内翻译软件应用&#xff0c;可以搜索translations配置快捷键any-rule&#xff1a;正侧插件&#…...

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())

项目场景&#xff1a; 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非常容易&#xff0c;以下是针对不同操作系统的安装步骤&#xff1a; 在Windows上安装GIT&#xff1a; 访问 Git官方网站。下载适合您Windows版本的GIT安装程序&#xff08;32位或64位&#xff09;。运行下载的安装程序。…...

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常见设计模式

单例模式&#xff1a;程序自始至终只创建一个对象。 应用场景&#xff1a;1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案&#xff1a; 双重检查加锁机…...

Hive 【Hive(七)窗口函数练习】

窗口函数案例 数据准备 1&#xff09;建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2&#xff09;装载语句 i…...

C++深入学习part_1

Linux下编译C程序 安装g命令&#xff1a;sudo apt install g 编译命令&#xff1a;$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到&#xff1a; namespace命名空间 首先&#xff0c;命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下&#xff1…...

leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展

300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff…...

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命令将返回以蓝色、绿色和红色&#xff08;BGR格式&#xff09;开头的三个通道 处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU CUDA模块中的函数都定义在cv::cuda命名空间中&#xff0c;将设备上配置给图像数据用的显存块作为其参数。 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多模型切换技巧&#xff1a;GLM-4.7-Flash与Qwen3-32B混合调用实战 1. 为什么需要多模型切换 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动处理周报时&#xff0c;发现一个有趣的现象&#xff1a;用同一个模型处理文本摘要和代码片段时&#xff0c;效果差异很大…...

JavaScript动态交互:在网页中实时调整参数并预览LiuJuan生成效果

JavaScript动态交互&#xff1a;在网页中实时调整参数并预览LiuJuan生成效果 你是不是也遇到过这种情况&#xff1f;想用AI模型生成图片&#xff0c;但每次调整参数都要在代码里改来改去&#xff0c;然后重新运行脚本&#xff0c;等半天才能看到效果。整个过程就像在开盲盒&am…...

告别无脑抄payload:手把手教你分析RCE-labs靶场PHP源码,自己构造利用链

从源码审计到漏洞利用&#xff1a;深度解析RCE靶场中的PHP代码逻辑 在安全研究领域&#xff0c;真正区分新手与专家的关键能力&#xff0c;往往不是掌握多少现成的攻击载荷&#xff08;payload&#xff09;&#xff0c;而是能否通过源码审计独立发现漏洞并构造利用链。本文将带…...

智慧医疗泡罩药板药片缺失缺陷检测数据集VOC+YOLO格式1300张3类别

注意数据集中图片大约500张是原图剩余为增强图片数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;1300标注数量(xml文件个数)&#xff1a;1300…...

Qwen3.5小尺寸模型开源,9B碾压GPT开源版,消费级显卡就能跑

AI圈又出大新闻了✨ 阿里通义千问3.5系列小尺寸模型正式亮相&#xff0c;直接打破“小模型能力弱”的固有认知&#xff0c;甚至实现了“以小胜大”的逆袭&#xff0c;本地部署门槛直接拉到平民级&#xff01; 先上核心干货——这次千问3.5一口气推出了4款小尺寸模型&#xff0c…...

Mojo+Python混合项目部署失败全记录(含完整错误日志溯源与跨运行时调试手册)

第一章&#xff1a;MojoPython混合项目部署失败全记录&#xff08;含完整错误日志溯源与跨运行时调试手册&#xff09;在将 Mojo 模块嵌入 Python 3.11 环境的 CI/CD 流水线中&#xff0c;首次构建即触发运行时崩溃。核心现象为 mojo_runtime_init() 在 Python 进程内调用后立即…...

电动汽车工程师视角:碳化硅模块在电驱系统中的应用实战(含热管理设计)

碳化硅功率模块在电动汽车电驱系统中的工程实践 当一辆搭载碳化硅逆变器的电动汽车从静止加速到100km/h时&#xff0c;功率模块内部的温度变化可能超过100℃。这种极端工况正是第三代半导体材料大显身手的舞台。作为参与过多个量产项目的电驱系统工程师&#xff0c;我想分享一些…...

别再只盯着find了!Linux系统隐藏文件和进程的5种“花活”与排查指南

Linux系统隐匿技术深度解析&#xff1a;从防御视角看5种高级隐藏手法与实战排查 在Linux系统安全领域&#xff0c;攻击者与防御者的博弈从未停止。当普通管理员还在使用ls和ps检查系统时&#xff0c;高级攻击者早已掌握多种隐匿技术。本文将揭示五种超越常规认知的隐藏手法&…...

Transformer在车道线检测中的实战应用:LSTR模型从理论到代码实现

Transformer在车道线检测中的实战应用&#xff1a;LSTR模型从理论到代码实现 自动驾驶技术的快速发展对车道线检测提出了更高要求。传统基于CNN的分割方法往往需要复杂的后处理流程&#xff0c;而LSTR&#xff08;Lane Shape Prediction with Transformers&#xff09;通过端到…...

Arduino轻量级哈希表UnorderedMap实战指南

1. 项目概述UnorderedMap是一款专为 Arduino 平台设计的轻量级哈希表&#xff08;Hash Table&#xff09;实现&#xff0c;其核心目标是在资源极度受限的微控制器环境中提供高效、可靠、内存可控的键值对&#xff08;Key-Value Pair&#xff09;存储能力。它并非 C STLstd::uno…...