c语言编程题经典100例——(56~60例)

1,实现链表中节点的比较。

        在C语言中,链表是一种常见的数据结构,用于存储一系列的数据元素。每个节点包含数据和指向下一个节点的指针。比较两个链表节点的操作取决于具体需求。如果想比较两个节点中的数据,可以写一个函数来实现这个操作。

以下是一个简单的示例,该示例展示了如何比较两个链表节点:

#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct Node {  int data;  struct Node* next;  
} Node;  // 比较两个节点的函数  
int compareNodes(Node* node1, Node* node2) {  return node1->data - node2->data;  
}  // 创建新节点的函数  
Node* createNode(int data) {  Node* newNode = (Node*)malloc(sizeof(Node));  if(newNode == NULL) {  printf("Memory allocation failed\n");  exit(0);  }  newNode->data = data;  newNode->next = NULL;  return newNode;  
}  int main() {  Node* node1 = createNode(10);  Node* node2 = createNode(20);  Node* node3 = createNode(30);  node1->next = node2;  node2->next = node3;  int result = compareNodes(node1, node3);  if(result < 0) {  printf("Node 1 is less than Node 3\n");  } else if(result > 0) {  printf("Node 1 is greater than Node 3\n");  } else {  printf("Node 1 is equal to Node 3\n");  }  return 0;  
}

        在这个示例中,首先定义了一个名为Node的结构体,用于表示链表的节点。然后创建了一个名为compareNodes的函数,该函数接收两个节点作为参数,并返回它们之间的差值。在主函数中,创建了三个节点并将它们连接起来形成一个链表。然后使用compareNodes函数比较了第一个节点和第三个节点,并打印出了相应的结果。

2,实现链表中节点的遍历。

        在C语言中,遍历链表节点通常是通过一个循环来完成的,该循环从头节点开始,然后依次访问每个节点,直到到达链表的末尾。以下是一个简单的示例,展示了如何使用C语言实现链表中节点的遍历:

#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct Node {  int data;  struct Node* next;  
} Node;  // 创建新节点的函数  
Node* createNode(int data) {  Node* newNode = (Node*)malloc(sizeof(Node));  if (newNode == NULL) {  printf("Memory allocation failed\n");  exit(0);  }  newNode->data = data;  newNode->next = NULL;  return newNode;  
}  // 遍历链表节点的函数  
void traverseList(Node* head) {  Node* current = head;  while (current != NULL) {  printf("%d ", current->data);  current = current->next;  }  printf("\n");  
}  int main() {  Node* head = createNode(1);  head->next = createNode(2);  head->next->next = createNode(3);  head->next->next->next = createNode(4);  head->next->next->next->next = createNode(5);  printf("Traversing the linked list:\n");  traverseList(head);  return 0;  
}

        在这个示例中,首先定义了一个名为Node的结构体,用于表示链表的节点。然后创建了一个名为createNode的函数,该函数用于创建新的节点。接着定义了一个名为traverseList的函数,该函数接收一个头节点作为参数,并通过一个while循环来遍历链表中的每个节点。在循环中,打印出每个节点的数据,并将当前节点更新为下一个节点。最后,在主函数中,创建了一个包含5个节点的链表,并使用traverseList函数遍历了这些节点。

3,实现链表中节点的查找。

        在C语言中,可以使用链表数据结构进行节点的查找。以下是一个简单的示例,展示了如何使用C语言实现链表中节点的查找:

#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct Node {  int data;  struct Node* next;  
} Node;  // 创建新节点的函数  
Node* createNode(int data) {  Node* newNode = (Node*)malloc(sizeof(Node));  if (newNode == NULL) {  printf("Memory allocation failed\n");  exit(0);  }  newNode->data = data;  newNode->next = NULL;  return newNode;  
}  // 在链表中查找节点的函数  
Node* searchNode(Node* head, int data) {  Node* current = head;  while (current != NULL) {  if (current->data == data) {  return current;  }  current = current->next;  }  return NULL;  
}  int main() {  Node* head = createNode(1);  head->next = createNode(2);  head->next->next = createNode(3);  head->next->next->next = createNode(4);  head->next->next->next->next = createNode(5);  int target = 3;  Node* result = searchNode(head, target);  if (result != NULL) {  printf("Found node with data: %d\n", result->data);  } else {  printf("Node not found\n");  }  return 0;  
}

        在这个示例中,首先定义了一个名为Node的结构体,用于表示链表的节点。然后创建了一个名为createNode的函数,该函数用于创建新的节点。接着定义了一个名为searchNode的函数,该函数接收一个头节点和一个目标数据作为参数,并通过一个while循环来遍历链表中的每个节点。在循环中,检查当前节点的数据是否等于目标数据,如果是,则返回当前节点。如果循环结束仍未找到目标节点,则返回NULL。最后,在主函数中,创建了一个包含5个节点的链表,并使用searchNode函数查找目标数据。如果找到目标节点,则打印出该节点的数据;否则打印出“Node not found”。

4,实现链表中节点的插入。

在C语言中,可以通过链表结构体的指针来插入新的节点。以下是一个简单的示例,展示了如何在链表中插入新的节点:

#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct Node {  int data;  struct Node* next;  
} Node;  // 创建新节点的函数  
Node* createNode(int data) {  Node* newNode = (Node*)malloc(sizeof(Node));  if (newNode == NULL) {  printf("Memory allocation failed\n");  exit(0);  }  newNode->data = data;  newNode->next = NULL;  return newNode;  
}  // 在链表中插入新节点的函数  
void insertNode(Node** head, int data) {  // 创建新节点  Node* newNode = createNode(data);  // 如果链表为空,将新节点设置为头节点  if (*head == NULL) {  *head = newNode;  return;  }  // 找到链表的末尾,并将新节点插入到末尾之后  Node* current = *head;  while (current->next != NULL) {  current = current->next;  }  current->next = newNode;  
}  int main() {  Node* head = NULL; // 初始化链表为空  // 插入节点  insertNode(&head, 1);  insertNode(&head, 2);  insertNode(&head, 3);  insertNode(&head, 4);  insertNode(&head, 5);  // 遍历链表并打印节点的数据  Node* current = head;  while (current != NULL) {  printf("%d ", current->data);  current = current->next;  }  printf("\n");  return 0;  
}

        在这个示例中,首先定义了一个名为Node的结构体,用于表示链表的节点。然后创建了一个名为createNode的函数,该函数用于创建新的节点。接着定义了一个名为insertNode的函数,该函数接收一个指向头节点的指针和一个目标数据作为参数,并通过一个while循环来遍历链表,找到链表的末尾并将新节点插入到末尾之后。最后,在主函数中,初始化了一个空链表,并使用insertNode函数插入了5个节点。然后遍历链表并打印出每个节点的数据。

5,实现链表中节点的删除。

        在C语言中,可以使用链表数据结构的指针来实现节点的删除。以下是一个简单的示例,展示了如何使用C语言实现链表中节点的删除:

#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct Node {  int data;  struct Node* next;  
} Node;  // 创建新节点的函数  
Node* createNode(int data) {  Node* newNode = (Node*)malloc(sizeof(Node));  if (newNode == NULL) {  printf("Memory allocation failed\n");  exit(0);  }  newNode->data = data;  newNode->next = NULL;  return newNode;  
}  // 删除链表中节点的函数  
void deleteNode(Node** head, int data) {  // 如果链表为空,则直接返回  if (*head == NULL) {  return;  }  // 如果要删除的节点是头节点  if ((*head)->data == data) {  Node* temp = *head;  *head = (*head)->next;  free(temp);  return;  }  // 查找要删除的节点并删除它  Node* current = *head;  while (current->next != NULL && current->next->data != data) {  current = current->next;  }  if (current->next != NULL) {  Node* temp = current->next;  current->next = current->next->next;  free(temp);  }  
}  int main() {  Node* head = createNode(1);  head->next = createNode(2);  head->next->next = createNode(3);  head->next->next->next = createNode(4);  head->next->next->next->next = createNode(5);  // 删除节点并打印链表数据  deleteNode(&head, 3);  Node* current = head;  while (current != NULL) {  printf("%d ", current->data);  current = current->next;  }  printf("\n");  return 0;  
}

        在这个示例中,首先定义了一个名为Node的结构体,用于表示链表的节点。然后创建了一个名为createNode的函数,该函数用于创建新的节点。接着定义了一个名为deleteNode的函数,该函数接收一个指向头节点的指针和一个目标数据作为参数,并删除链表中的目标节点。如果要删除的节点是头节点,则直接将头节点指向下一个节点,并释放原头节点的内存;否则,遍历链表查找目标节点,并将其删除。最后,在主函数中,创建了一个包含5个节点的链表,并使用deleteNode函数删除了其中一个节点。然后遍历链表并打印出每个节点的数据。

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

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

相关文章

什么是Anaconda

Anaconda的安装也很方便。打开这个网站Anaconda下载&#xff0c;然后安装即可。 Anaconda可以帮助我们解决团队之间合作的包依赖管理问题。在没有使用Anaconda之前&#xff0c;如果你的Python程序想让你的同事运行&#xff0c;那么你的同事可能会遇到很多包依赖问题&#xff0…

景联文科技数据标注平台助力AI数据实现价值最大化

随着人工智能技术不断进步&#xff0c;应用领域不断拓宽&#xff0c;对于高质量、大规模标注数据的需求也在不断增加。 数据标注是人工智能行业的基石。机器学习需要运用海量的有效数据来做支撑&#xff0c;而这些数据就需要我们的标注员对其进行分析和处理&#xff0c;想要得到…

系列十七、理解SpringBoot中的starter 自定义一个starter

一、概述 作为后端Java程序员&#xff0c;基本上公司的日常开发都是基于SpringBoot进行的&#xff0c;我们使用SpringBoot也是沉醉于它的各种各样的starter带给我们的便利&#xff0c;这些starter为我们带来了众多的自动化配置&#xff0c;通过这些自动化配置&#xff0c;我们可…

miot-plugin-sdk 使用echart图表插件

1.安装 echart npm install native-echarts --save2.引用 import Echarts from native-echarts;3.把option封装成函数 echart(val,title){option {tooltip: {formatter: {a} <br/>{b} : {c}%},series: [{name: Pressure,type: gauge,detail: {formatter: {value}},dat…

c语言-快速排序

目录 一、实现快速排序三种方法 1、hoare法 2、挖坑法 3、双指针法 4、快速排序的优化 5、测试对比 结语&#xff1a; 前言&#xff1a; 快速排序作为多种排序方法中效率最高的一种&#xff0c;其底层原理被广泛运用&#xff0c;他的核心思想与二叉树结构中的递归逻辑相似…

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容&#xff0c;然后让这个内容变成你自己的私有知识库&#xff0c;并且还可以搭建一个基于私有知识库的问…

没有预装Edge浏览器的Windows系统安装Edge正式版的方法,离线安装和在线安装

一、在线安装 没有预装Edge浏览器的Windows系统安装Edge正式版的方法 二、离线安装 进入到下面这个目录 C:\Program Files (x86)

DEXP DIMP导出导入备份

DEXP & DIMP导出导入备份 导出导入示例可用参数一览 导出导入示例 将数据库的KNOWDB模式下下的所有数据库对象导出到/home/dmdba/路径下的dmp文件中&#xff1a; cd /dameng/app/v8/bin/ ./dexp USERIDSYSDBA/SYSDBA FILEknowdb_20231122.dmp LOGdexp.log \ DIRECTORY/h…

【Web】NISACTF 2022 个人复现

目录 ①easyssrf ②babyupload ③ level-up ④bingdundun~ 明天就新生赛了&#xff0c;练套题保持下手感吧 &#xff08;文章只选取了一部分&#xff09; ①easyssrf 输入/flag 输入file:///fl4g 访问/ha1x1ux1u.php ?filephp://filter/convert.base64-encode/resource/…

UI自动化Selenium OCR库:ddddocr识别验证码

一、安装ddddocr 通过命令将自动安装 pip install ddddocr 如果速度慢&#xff0c;可用国内镜像&#xff0c;命令如下&#xff1a; pip install ddddocr -i Simple Index 二、使用实例 import ddddocr# 验证码识别 def ocrImg2(self, locate, locateTypeBy.XPATH):# 获取验…

手写VUE后台管理系统6 - 支持TS声明文件.d.ts

TS 使用声明文件进行类型定义。 配置 在 tsconfig.json 文件中&#xff0c;找到 include 属性&#xff0c;添加 "src/**/*.d.ts"&#xff0c;表示 src 目录下的所有 .d.ts 文件都会被自动加载。 添加后内容如下 "include": ["src/**/*.ts",&…

C++利剑string类(详解)

前言&#xff1a;大家都知道在C语言里面的有 char 类型&#xff0c;我接下来要讲的 string 类功能是使用 char 类型写的类&#xff0c;当然这个是C官方写的&#xff0c;接下来我们将会学会使用它&#xff0c;我们会发现原来 char 这种类型是还能这么好用&#xff0c;授人以…

Linux C语言 31-网络编程之TCP例程

Linux C语言 31-网络编程之TCP例程 本节关键字&#xff1a;C语言 网络编程 套接字操作 TCP协议 服务端 客户端 非阻塞 相关C库函数&#xff1a;setsockopt, socket, bind, listen, accept, recv, send, close, select, connect 相关接口介绍 Linux C语言 30-套接字操作 例程…

【VerilogVCS仿真_2023.11.15】

HDL&#xff1a;硬件描述语言&#xff0c;并发&#xff0c;时序RTL&#xff1a;寄存器传输级语言 Verilog和VHDL的区别&#xff1a;VHDL侧重于系统级描述——系统级设计人员所采用&#xff0c;Verilog侧重于模块行为的抽象描述——电路级设计人员 前端&#xff1a;系统级、算法…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区&#xff1a;先写一个.c文件如下&#xff1a; 我们执行一下这个程序时&…

【产品应用】一体化伺服电机在摆轮分拣机中的应用

随着物流和制造业的快速发展&#xff0c;分拣机的应用越来越广泛。摆轮分拣机作为一种常见的分拣设备&#xff0c;具有高效、准确、灵活等特点&#xff0c;被广泛应用于各类物流分拣场景。而一体化伺服电机在摆轮分拣机中的应用&#xff0c;为分拣机的性能提升和优化提供了新的…

专业视频剪辑利器Final Cut Pro for Mac,让你的创意无限发挥

在如今的数字时代&#xff0c;视频内容已经成为人们生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴&#xff0c;还是在工作中制作专业的营销视频&#xff0c;我们都希望能够以高质量、高效率地进行视频剪辑和制作。而Final Cut Pro for Mac作为一款专业级的视频剪辑软…

6.5 Windows驱动开发:内核枚举PspCidTable句柄表

在 Windows 操作系统内核中&#xff0c;PspCidTable 通常是与进程&#xff08;Process&#xff09;管理相关的数据结构之一。它与进程的标识和管理有关&#xff0c;每个进程都有一个唯一的标识符&#xff0c;称为进程 ID&#xff08;PID&#xff09;。与之相关的是客户端 ID&am…

【蓝桥杯软件赛 零基础备赛20周】第6周——栈

文章目录 1. 基本数据结构概述1.1 数据结构和算法的关系1.2 线性数据结构概述1.3 二叉树简介 2. 栈2.1 手写栈2.2 CSTL栈2.3 Java 栈2.4 Python栈 3 习题 1. 基本数据结构概述 很多计算机教材提到&#xff1a;程序 数据结构 算法。 “以数据结构为弓&#xff0c;以算法为箭”…

uniapp uview u-input在app(运行在安卓基座上)上不能动态控制type类型(显隐密码)

开发密码显隐功能时&#xff0c;在浏览器h5上功能是没问题的 <view class"login-item-input"><u-input:type"showPassWord ? password : text"style"background: #ecf0f8"placeholder"请输入密码"border"surround&quo…