当前位置: 首页 > 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 **固…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...