数据结构(单向链表)

单向链表代码

#ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node
{DataType data;struct node *pnext;
}Link_Node_t;typedef struct link
{Link_Node_t *phead;int clen;
}Link_t;extern Link_t *link_creat();
extern int push_link_head(Link_t *plink, DataType data);
extern int print_link_all(Link_t *plink);
extern int push_link_tail(Link_t *plink, DataType data);
extern int pop_link_head(Link_t *plink);
extern int pop_link_tail(Link_t *plink);
extern Link_Node_t * find_link_data(Link_t *plink, DataType data);
extern int change_link_data(Link_t *plink, DataType des, DataType src);
extern int delall_link_data(Link_t *plink);
extern Link_Node_t* med_link_data(Link_t *plink);
extern Link_Node_t* find_link_tail_k(Link_t* plink, int k);
extern int del_k_link(Link_t *plink, int k);#endif

#include "link.h"
#include <stdio.h>
int main(void)
{int ret = 0;Link_Node_t* find = NULL;Link_t *plink = link_creat();if(plink ==  NULL){printf("link_creat fail");return -1;}push_link_head(plink, 1);push_link_head(plink, 2);push_link_head(plink, 3);push_link_head(plink, 4);push_link_head(plink, 5);push_link_tail(plink, 6);push_link_tail(plink, 7);push_link_tail(plink, 8);push_link_tail(plink, 9);print_link_all(plink);pop_link_head(plink);pop_link_tail(plink);print_link_all(plink);find = find_link_data(plink, 10);if(NULL == find){printf("没找到\n");}else{printf("index = %p\n", find);}ret = change_link_data(plink, 3, 50);if(ret == 1){printf("没有需要修改的数据\n");}print_link_all(plink);//delall_link_data(plink);/*printf("清除\n");plink = link_creat();push_link_tail(plink, 6);print_link_all(plink);
*/find = med_link_data(plink);if(NULL == find){printf("空链表\n");}else{printf("index = %p\n", find);}find = find_link_tail_k(plink, 4);if(NULL == find){printf("没找到\n");}else{printf("index = %p\n", find);}ret = del_k_link(plink, 4);if(-1 == ret){printf("不存在该节点\n");}print_link_all(plink);return 0;
}

#include "link.h"
#include <stdlib.h>
#include <stdio.h>//创建头部
Link_t *link_creat()
{Link_t *plink = (Link_t *)malloc(sizeof(Link_t));if(NULL == plink){perror("malloc fail");return NULL;}plink->phead = NULL;plink->clen = 0;return plink;
}//头插
int push_link_head(Link_t *plink, DataType data)
{Link_Node_t *pnode = (Link_Node_t *)malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("malloc fail");return -1;}pnode->data = data;pnode->pnext = NULL;pnode->pnext = plink->phead;plink->phead = pnode;plink->clen++;return 0;
}
//判空
int is_empty_link(Link_t *plink)
{return NULL == plink->phead;
}//尾插
int push_link_tail(Link_t *plink, DataType data)
{Link_Node_t *pnode = (Link_Node_t *)malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("malloc fail");return -1;}pnode->data = data;pnode->pnext = NULL;Link_Node_t *p = plink->phead;if(is_empty_link(plink)){plink->phead = pnode;}else{while(p->pnext != NULL){p = p->pnext;}p->pnext = pnode;}plink->clen++;return 0;
}//遍历
int print_link_all(Link_t *plink)
{Link_Node_t *p = plink->phead;while(p != NULL){printf("%d ", p->data);p = p->pnext;}putchar('\n');return 0;
}//头删
int pop_link_head(Link_t *plink)
{int i = 0;if(is_empty_link(plink)){i = 0;    }else{Link_Node_t *p = plink->phead;plink->phead = p->pnext;p->pnext = NULL;free(p);plink->clen--;i = 1;}return i;
}//尾删
int pop_link_tail(Link_t *plink)
{int i = 0;if(is_empty_link(plink)){i = 0;}else{if(plink->clen == 1){pop_link_head(plink);}else{Link_Node_t *p = plink->phead;while(p->pnext->pnext != NULL){p = p->pnext;}free(p->pnext);p->pnext = NULL;i = 1;plink->clen--;}}return i;
}
//查找对应数据的节点地址
Link_Node_t * find_link_data(Link_t *plink, DataType data)
{Link_Node_t *p = plink->phead;while(p != NULL){if(p->data == data){return p;}p = p->pnext;}return NULL;
}
//改变对应数据
int change_link_data(Link_t *plink, DataType des, DataType src)
{Link_Node_t *p = plink->phead;while(p != NULL){if(p->data == des){p->data = src;return 0;}p = p->pnext;}return 1;
}
//清楚
int delall_link_data(Link_t *plink)
{while(1){if(is_empty_link(plink)){free(plink);break;}else{pop_link_head(plink);}}return 0;
}Link_Node_t* med_link_data(Link_t *plink)
{printf("clen = %d\n", plink->clen);int med = (plink->clen / 2) + 1;int num = 1;Link_Node_t *p = plink->phead;if(plink->clen == 0){return NULL;}while(p != NULL){if(num == med){printf("data = %d\n", p->data);return p;}p = p->pnext;num ++;}return NULL;
}Link_Node_t* find_link_tail_k(Link_t* plink, int k)
{int num = 0;if(k > plink->clen){return NULL;}int find_k = plink->clen - k;printf("num = %d  k = %d\n", num, k);Link_Node_t *p = plink->phead;while(p != NULL){if(num == find_k){printf("data = %d\n", p->data);return p;}++num;p = p->pnext;}return NULL;
}int del_k_link(Link_t *plink, int k)
{int num = 1;if(k > plink->clen){return -1;}else if(k == 1){pop_link_head(plink);return 0;}else if(k == plink->clen){pop_link_tail(plink);return 0;}Link_Node_t* p = plink->phead;while(p != NULL){if(num == k - 1){Link_Node_t *p1 = p->pnext;p->pnext = p->pnext->pnext;free(p1);}++num;p = p->pnext;}return 0;
}

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

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

相关文章

2018年系统架构师案例分析试题一

目录 案例 【题目】 【问题 1】(8 分) 【问题 2】(8 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于软件系统设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某文化产业集团委托软件公…

【flask】python框架flask的hello world

创建一个py文件&#xff0c;写如下内容 # save this as app.py from flask import Flaskapp Flask(__name__)app.route("/") def hello():return "Hello, World!"如下图 在此py文件路径下启动cmd&#xff0c;输入 flask run结果如下图 在浏览器中访问…

计算机毕业设计选题推荐-企业人事管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

算法练习: 矩阵置零

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 要实现这个功能&#xff0c;我们可以使用原地算法。首先&#xff0c;我们需要两个额外的数组来记录哪些行和列需要被置为0。然后&#xff0c;我们遍历整…

3600关成语填字APP游戏ACCESS\EXCEL数据库

成语类的APP游戏在最近一两年内非常的火爆&#xff0c;其主要原因是几乎所有中国人都能够冲个几十上百关&#xff0c;学习和趣味共享。看图猜成语类的数据之前已经弄到过很多&#xff0c;今天这份成语填字的倒是头一份。 该数据做成的APP效果如下&#xff1a; 数据以\符号分隔…

Windows 11 下使用 MSVC 2022 编译64位Nginx

一、软件准备 1、安装 Visual Studio 2022 包含单个组件&#xff1a; .NET Framework 4.6.1 目标包.NET Framework 4.6.1 SDKWindows 通用 C 运行时Windows 通用 CRT SDKMSVC v142 - VS 2019 C x64/x86 生成工具(v14.26)对 v142 生成工具(14.21)的 C/CLI 支持Clang compile fo…

Confluence8.5.14安装

一、Centos8、安装jdk11(略) 二、mysql数据库 1、mysql安装包下载: MySQL :: Download MySQL Community Server 2、安装: https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.37-1.el8.x86_64.rpm-bundle.tar tar -xvf mysql-8.0.37-1.el8.x86_64.rpm-bund…

【Hadoop|HDFS篇】HDFS概述

1. HDFS产出背景及定义 1.1 HDFS产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系 统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这 就是分布…

智能化升级:AI在客服知识库中的应用

引言 在数字化时代&#xff0c;客户服务已成为企业竞争的关键一环。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;传统客服模式正经历着前所未有的变革。AI与客服知识库的深度融合&#xff0c;不仅极大地提升了客服处理的效率与准确性&#xff0c;还为用…

vue3集成sql语句编辑器

使用的是codemirror 安装 pnpm add codemirror vue-codemirror --savepnpm add codemirror/lang-sqlpnpm add codemirror/theme-one-dark使用 <template><codemirror v-model"configSql" placeholder"Code goes here..." ref"codemirrorR…

MIPI(Mobile Industry Processor Interface)

MIPI是指Mobile Industry Processor Interface&#xff0c;移动产业处理器接口&#xff0c;MIPI包含了多种接口&#xff0c;比如DSI显示屏接口、CSI摄像头接口、I3C、RFFE射频前端控制接口和SPMI系统电源管理接口。 车载液晶屏的接口主要使用RGB和LVDS&#xff0c;MIPI接口主要…

html+css+js网页设计 故宫7个页面 ui还原度100%

htmlcssjs网页设计 故宫7个页面 ui还原度100% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1…

汉诺塔的最简单讲解

##从印度佬哥那里学来&#xff0c;所以我想直接引用他画出来的树图 上图为一个经典的三碟盘的汉诺塔的递归树形图。 我们为了将所有碟盘按照从小到大的方式排列在目标处 --- 3 只用三步: 1. 将最小的碟盘和倒数第二的碟盘 全都移动到 2处 也就是中间那个棍子。 2.将最大的碟…

【服务对接】✈️SpringBoot 项目整合华为云 obs 对象存储服务

目录 &#x1f44b;前言 &#x1f440;一、环境准备 &#x1f331;二、整合实现 1.依赖引入 2.准备 AK 和 SK ​ 3.配置类 4.obs 工具类封装 &#x1f49e;️三、测试使用 &#x1f37b;四、 obs 客户端 &#x1f4eb;五、章末 &#x1f44b;前言 小伙伴们大家好&…

ini文件中的节点如何删除?

1、在某些场合中&#xff0c;会将某些数据记录本地情况&#xff0c;会有“保存/加载”过程。 比如&#xff1a; 第一次Write节点信息&#xff08;2个&#xff09;&#xff0c;如下节点 第二次Write节点信息&#xff08;1个&#xff09;&#xff0c;如下节点。会发现本来想写入…

《实战AI大模型》从入门到精通,彻底掌握AI技术

前言 《实战AI大模型》是一本兼具深度和广度的大模型入门书籍&#xff0c;它深入浅出地诠释了AI大模型的核心概念和技术。以大模型为代表的AI2.0是有史以来最重要的技术革命&#xff0c;如果你渴望了解和应用大模型&#xff0c;这本书是一份可贵的“知识基座” 无论你是NLP新手…

使用控制台与键盘进行输入输出

1、控制台简介与初始化 计算机在上电启动后&#xff0c;显示器被默认配置成80x25列的文本显示模式 。其使用从0xb8000开始&#xff0c;一共32KB的显存用于显示。如要在屏幕上指定位置显示特定的字符&#xff0c;则只需找到该位置对应的显存地址&#xff0c;写入2字节的数据&am…

海外直播对网速、带宽、安全的要求

要满足海外直播的要求&#xff0c;需要拥有合适的网络配置。在全球化的浪潮下&#xff0c;海外直播正逐渐成为企业、个人和各类组织的重要工具。不论是用于市场推广、品牌宣传&#xff0c;还是与观众互动&#xff0c;海外直播都为参与者带来了丰富的机会。然而&#xff0c;确保…

【C++从练气到飞升】19---哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、unordered 系列关联式容器 二、unordered_map 1.1 unordered_map 介绍 1.2 unordered_map 的…

5大专业措施确保源代码防泄密

深信达的SDC防泄密软件通过一系列创新技术和方法来实现源代码的安全保护&#xff0c;以下是一些关键点和注意事项&#xff1a; 1. **内核级虚拟沙盒技术**&#xff1a;SDC沙盒创建一个与外部环境隔离的执行空间&#xff0c;源代码的编译、运行和调试过程完全隔离于外部操作系统…