数据结构(Day17)

news2024/9/22 13:23:44

一、单链表实现信息管理

1、函数声明部分

#ifndef __LINK_H__
#define __LINK_H__
#include <myhead.h>
typedef struct Link1
{
	union{
		int len;//用于头结点,统计节点个数
		int data;//用于正常节点,存储数据
	};
	struct Link1 *next;//指针域
}Link,*Plink;
 
/**********函数声明**********/
//1.创建头结点
Plink create();
//1.1头插法
int front_insert(Plink l, int m);
//1.2尾插法
int last_insert(Plink l, int m);
//2.输出
void output_link(Plink l);
//3.任意位置插入一个节点
void anywhere_insert(Plink l, int pos, int m);	
//4.任意位置删除一个节点
void anywhere_delete(Plink l, int pos);
//5.任意位置查找一个节点
void anywhere_search(Plink l, int pos); 
//6.任意位置修改一个节点
void anywhere_rebuild(Plink l, int pos, int m);
 
#endif

2、函数(功能)实现部分

①、创建头节点

//创建头结点
Plink create()
{
	Plink p = malloc(sizeof(Link));
	if(p == NULL){
		printf("申请头结点失败!");
		return NULL;
	}
	p->len = 0;
	p->next = NULL;
	return p;
}

②、头插法插入节点

//头插法
int front_insert(Plink l , int m)
{
	if(NULL == l){
		printf("单链表不存在!\n");
		return -1;
	}
	Plink p = malloc(sizeof(Link));
	p->data = m;//把数据存入新节点
 
	p->next = l->next; //新节点指向旧的第一个节点
	l->next = p; //头结点指向新节点
	
	l->len++; //节点个数+1
	return 0;
}

③、尾插法插入节点

//尾插法
int last_insert(Plink l, int m)
{
	if(NULL == l){
		printf("单链表不存在!\n");
		return -1;
	}
	Plink t = l;
	for(int i=0; i<l->len; i++){
		t = t->next;
	}
 
	Plink p = malloc(sizeof(Link));
	p->data = m; //把数据存入新节点
 
	t->next = p; //最后一个节点指向新节点
	p->next = NULL; //新节点指向空
 
	l->len++; //节点个数+1
	return 0;
}

④、遍历输出

//输出
void output_link(Plink l)
{
	Plink t = l;
	for(int i=0; i<l->len; i++){ //循环len次
		t = t->next;
		printf("%d\t",t->data); //数据域
	}
	printf("\n");
}	

⑤、任意位置插入一个节点

//3.任意位置插入一个节点
void anywhere_insert(Plink l, int pos, int m)
{
	if(NULL == l || pos<1 || pos>l->len+1){
		printf("插入失败!\n");
		return;
	}
	Plink t = l;
	for(int i=1; i<pos; i++){
		t = t->next;
	}
 
	Plink p = malloc(sizeof(Link));
	p->data = m;
 
	p->next = t->next;
	t->next = p;
 
	l->len++;
}

⑥、任意位置删除一个节点

//4.任意位置删除一个节点
void anywhere_delete(Plink l, int pos)
{
	if(NULL == l || pos<1 || pos>l->len){
		printf("不允许删除!\n");
		return;
	}
	Plink t = l;
	for(int i=1; i<pos; i++){
		t = t->next;
	}
	Plink q = t->next; //保留要删除的节点
	t->next = t->next->next; //删除链接
	l->len--;
 
	free(q); //删除后释放
	q = NULL; //置空
}

⑦、任意位置查找一个节点

//5.任意位置查找一个节点
void anywhere_search(Plink l, int pos)
{
	if(NULL == l || pos<1 || pos>l->len){
		printf("查找失败!\n");
		return;
	}
	Plink t = l;
	for(int i=1; i<=pos; i++){
		t = t->next;
	}
	printf("第%d个节点的数据是:%d\n",pos, (t->data) );
}

⑧、任意位置修改一个节点

//6.任意位置修改一个节点
void anywhere_rebuild(Plink l, int pos, int m)
{
	if(NULL==l || pos<1 || pos>l->len){
		printf("修改失败!\n");
		return;
	}
 
	Plink t = l;
	for(int i=1; i<=pos; i++){
		t = t->next;
	}
 
	t->data = m;
}

3、主函数部分

#include"link.h"
 
int main(int argc, const char *argv[])
{
	int a[10]={0,1,2,3,4,5,6,7,8,9};
	//1.创建头结点
	Plink l = create();
 
	//1.1头插法
	for(int i=0; i<10; i++){
		front_insert(l, a[i]);
	}
	output_link(l);
	
	//1.2尾插法
	for(int i=0; i<10; i++){
		last_insert(l, a[i]);	
	}
	output_link(l);
 
	//3.任意位置插入一个节点
	anywhere_insert(l, 5, 666);
	output_link(l);
 
	//4.任意位置删除一个节点
	anywhere_delete(l, 8);
	output_link(l);
 
	//5.任意位置查找一个节点
	anywhere_search(l, 10);
 
	//6.任意位置修改一个节点
	anywhere_rebuild(l ,2, 999);
	output_link(l);
	
	free(l); //释放内存
	l = NULL; //置空
	return 0;
}

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

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

相关文章

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址&#xff1a;Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件&#xff0c;有一个示例配置文件 conf/zoo_sample.cfg&#xff0c;此文件不能生效&#xff0c;需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址&#xff1a;https://www.sqlite.org/download.html 下载&#xff1a;sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹&#xff0c;将压缩包复制到该文件夹下&#xff0c;再在该目录下打开一个终端&#xff0c;执行…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进&#xff1a;全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;课程表 .1- 题目解析 .2- 代码编写 2&#xff09;课程表 II .1- 题目解析 .2- 代码编写 3&#xff09;火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来&#xff0c;随着AI技术的迅猛发展&#xff0c;尤其是ChatGPT等大语言模型的出现&#xff0c;全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌&#xff0c;在这场竞争中逐渐失去了领头羊的地位。然而&#xff0c;谷歌的创始人之一谢尔盖布林&#xff08;Sergey Br…

计算组合数

1.递推 #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; #define int long long //可能会超时 #define PII pair<int,int> const int INF 0x3f3f3f3f, mod 1e9 7; const int N 2005; int a, b,n; …

手机自动化测试环境之夜神模拟器inspector部署验证

1、自动化测试环境部署_总览图检查表流程图 Python需要安装Appium-Python-Clicent去定位元素&#xff1b;Appium是一个中间的服务器&#xff0c;它需要依赖node.js&#xff0c;python的脚本通过appium和手机进行交互&#xff1b;手机app的环境都是java环境&#xff0c;先安装jd…

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…

gitlab 的CI/CD (一)

前言 GitLab CI/CD 是一个内置在GitLab中的工具&#xff0c;用于通过持续方法进行软件开发&#xff1a; Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署 持续集成的工作原理是将小的代码块推送到Git仓库…

JavaEE: 深入探索TCP网络编程的奇妙世界(三)

文章目录 TCP核心机制TCP核心机制三: 连接管理建立连接(三次握手)断开连接(四次挥手)三次握手/四次挥手 流程简图 TCP核心机制 书接上文~ TCP核心机制三: 连接管理 建立连接(三次握手),断开连接(四次挥手). 这里的次数指的是网络通信的次数,挥手/握手是形象的比喻(handshake…

PM2.5粉尘传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 4.粉尘浓度转化关系 5.空气污染指数 三、程序设计 main.c文件 PM25.h文件 PM25.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 GP2Y1014AU是日本夏普公司开发的一款光学灰尘浓度检测传…

探索 Web Speech API:实现浏览器语音识别与合成

引言 Web Speech API 是一项由 W3C 开发的 Web 标准&#xff0c;为开发者提供了在 Web 应用程序中实现语音识别和语音合成的能力。通过 Web Speech API&#xff0c;我们可以让网页与用户进行语音交互&#xff0c;实现更加智能化和便捷的用户体验。本文将深入探讨 Web Speech A…

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件&#xff0c;在下列情形中&#xff0c;可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果&#xff0c;你需要对transition组件的name属性自定义。…

【Linux】当前进展

驱动层日志添加了下文件目录&#xff0c;函数&#xff0c;代码行的打印&#xff08;这里要小心&#xff0c;驱动目录源代码打印日志里边添进程号可能有问题&#xff0c;因为在驱动初始化的时候&#xff0c;内核还没有创建进程&#xff0c;不过猜测可以先不打印进程相关信息&…