数据结构---链表的基本操作
- 头插法
- 遍历链表
- 尾插法
- 头删法
- 尾删法
- 按位置插入数据
- 按位置删除数据
- 直接插入排序
- 链表翻转
- 快慢指针
linklist.c
#include <stdio.h>
#include <stdlib.h>
#include "./linklist.h"linklist* create_linklist(void)
{linklist* head = (linklist*)malloc(sizeof(linklist)); if(NULL == head){printf("头结点申请失败!\n");return NULL;}head->text.len = 0;head->next = NULL;return head;
}
//头插法
int insertHead_linlist(linklist *head,dataType num)
{//创建一个新结点linklist* temp = (linklist*)malloc(sizeof(linklist));if(NULL == temp){printf("创建失败!\n");return 0;}temp->text.data = num;temp->next = NULL;//头插法插入数据temp->next = head->next;head->next = temp;return 0;
}//遍历链表void show_linklist(linklist* head)
{linklist *p = head;while(p->next != NULL){p = p->next;printf("%d ",p->text.data);}printf("\n");//更新头结点中记录的链表长度head->text.len++;return;
}//尾插法
int insertTail_linlist(linklist* head,dataType num)
{linklist* temp = (linklist*)malloc(sizeof(linklist));if(NULL == temp){printf("创建失败!\n");return 0;}//初始化新结点temp->next = NULL;temp->text.data = num;linklist* p = head;while(p->next != NULL){p = p->next;}p->next = temp;temp->next = NULL;head->text.len++;return 0;
}
//判空
int isEmpty_linlist(linklist* head)
{return head->next == NULL?1:0;
}//头删
dataType delHead_linlist(linklist* head)
{if(isEmpty_linlist(head)){printf("链表为空!");return (dataType)0;}linklist* temp = head->next;head->next = head->next->next;dataType num = temp->text.data;free(temp);temp = NULL;head->text.len--;return num;
}//尾删
dataType delTail_linlist(linklist* head)
{if(isEmpty_linlist(head)){printf("链表为空!");return (dataType)0;}linklist* p = head;linklist* temp;while(p->next != NULL) //p->next->next != NULL{temp = p;p = p->next;}temp->next=temp->next->next;free(p); //free(temp->next)p = NULL; //temp->next = NULLhead->text.len--;return 0;}//按位置插入
void insert_location_linlist(linklist *head,dataType index,dataType num)
{if(index<1 || index >head->text.len+1){printf("位置非法!");return;}int i;linklist* temp=head;linklist* p = (linklist*)malloc(sizeof(linklist));if(NULL == p){printf("插入失败!\n");return ;}//初始化新结点p->text.data = num;p->next = NULL;for(i=0;i<index-1;i++){temp = temp->next;}p->next = temp->next;temp->next = p;head->text.len++;return;}//按位置删除
void del_location_linlist(linklist* head,dataType index)
{if(isEmpty_linlist(head)){printf("链表为空!");return;}linklist* temp = head;for(int i=0;i<index-1;i++){temp = temp->next;}linklist* p = temp->next;temp->next = temp->next->next;free(p);p = NULL;head->text.len--;return;}//按位置查找
void find_location_linlist(linklist* head,dataType index)
{linklist* temp = head;for(int i=0;i<index;i++){temp = temp->next;}printf("%d\n",temp->text.data);head->text.len++;return;}//直接插入排序
void insert_sort_linlist(linklist* head,dataType num)
{linklist* p = head;int sum=0;while(p != NULL){sum++;p = p->next;}linklist* temp = head;for(int i=0;i<sum;i++){linklist* q = temp;while(q->next != NULL){if(q->text.data > q->next->text.data){int tem = q->text.data;q->text.data = q->next->text.data;q->next->text.data = tem;}q = q->next;}}int t=0;linklist* temp2 = head;for(int j=0;j<sum;j++){if(num > temp2->text.data){t++;}temp2 = temp2->next;}//按位置插入insert_location_linlist(head,t,num);}//链表翻转
void reversal_linlist(linklist* head)
{linklist *p;linklist *q;p=head->next;head->next=NULL;while(p!=NULL){q=p;p=p->next;q->next=head->next;head->next=q;}
}
//快慢指针查找中间节点位置
void middleNode_linklist(linklist* head)
{if(isEmpty_linlist(head)){printf("链表为空!");return;} linklist *low,*fast;low = head->next;fast = head->next; while(fast != NULL && fast->next != NULL){low = low->next; fast = fast->next->next;}printf("low = %d\n",low->text.data);return;
}
linklist.h
#ifndef __LINKLIDT_H__
#define __LINKLIDT_H__typedef int dataType;union msg{dataType data;int len;
};
typedef struct node
{struct node* next;union msg text;
}linklist;linklist* create_linklist(void);
int insertHead_linlist(linklist *head,dataType num);
void show_linklist(linklist* head);
int insertTail_linlist(linklist* head,dataType num);
dataType delHead_linlist(linklist* head);
dataType delTail_linlist(linklist* head);
void insert_location_linlist(linklist *head,dataType index,dataType num);
void del_location_linlist(linklist* head,dataType index);
void find_location_linlist(linklist* head,dataType index);
void insert_sort_linlist(linklist* head,dataType num);
void reversal_linlist(linklist* head);
void middleNode_linklist(linklist* head)
#endif
main.c
#include <stdio.h>
#include "./linklist.h"
int main(int argc, const char *argv[])
{linklist* head = create_linklist();insertHead_linlist(head,11);insertHead_linlist(head,24);insertHead_linlist(head,46);insertHead_linlist(head,28);insertHead_linlist(head,18);
// show_linklist(head);insertTail_linlist(head,36);insertTail_linlist(head,27);insertTail_linlist(head,30);show_linklist(head);/* dataType num = 0;num = delHead_linlist(head);show_linklist(head);num = delHead_linlist(head);show_linklist(head);num = delTail_linlist(head);show_linklist(head);num = delTail_linlist(head);show_linklist(head);
*/ /* insert_location_linlist(head,1,111);insert_location_linlist(head,5,555);insert_location_linlist(head,8,888);show_linklist(head);
*/
/* del_location_linlist(head,2);show_linklist(head);
*/
/* find_location_linlist(head,1);find_location_linlist(head,3);find_location_linlist(head,8);
*/insert_sort_linlist(head,22);show_linklist(head);reversal_linlist(head);show_linklist(head);middleNode_linklist(head)return 0;
}
相关文章:
数据结构---链表的基本操作
头插法遍历链表尾插法头删法尾删法按位置插入数据按位置删除数据直接插入排序 链表翻转快慢指针 linklist.c #include <stdio.h> #include <stdlib.h> #include "./linklist.h"linklist* create_linklist(void) {linklist* head (linklist*)malloc(siz…...
异步框架Celery在Django中的运用
参考博客:https://www.cnblogs.com/pyedu/p/12461819.html 参考视频:01 celery的工作机制_哔哩哔哩_bilibili 定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度 主要架构: …...
YOLOv5代码解读[02] models/yolov5l.yaml文件解析
文章目录 YOLOv5代码解读[02] models/yolov5l.yaml文件解析yolov5l.yaml文件检测头1--->耦合头检测头2--->解耦头检测头3--->ASFF检测头Model类解析parse_model函数 YOLOv5代码解读[02] models/yolov5l.yaml文件解析 yolov5l.yaml文件 # YOLOv5 🚀 by Ult…...
智能搬运机器人|海格里斯将如何持续推进工业和物流的智能化升级与发展?
存取、搬运、分拣是物流行业中的通用功能,但具体到每个行业又十分不同,例如:新能源电池领域,它所搬运的东西是电池,50KG~200KG;快递行业领域,所要处理的物料是那种扁平件和信封等等,…...
linux之前后端项目部署与发布
目录 前言 简介 一、安装Nginx 二、后端部署 2.1多个tomcat负载均衡 2.2 负载均衡 2.3 后端项目部署 三、前端部署 1.解压前端 2.Nginx配置文件修改 3.IP域名映射 4.重启Nginx服务 前言 上篇博主已经讲解过了单机项目的部署linux之JAVA环境配置JDK&Tomcat&a…...
Python 高级语法:一切皆对象
1 “一切皆对象”是一种核心设计哲学 在编程领域,特别是面向对象编程(OOP)中,“一切皆对象”是一种核心设计哲学。这种哲学主张,无论是数据、函数、还是更复杂的结构,都可以被视为对象,并赋予…...
python jupyter notebook打开页面方便使用
如果没安装jupyter, 请安装: pip install jupyter notebook 运行jupyter notebook jupyter-notebook...
音视频开发之旅(69)-SD图生图
目录 1. 效果展示 2. ControlNet介绍 3. 图生图流程浅析 4. SDWebui图生图代码流程 5. 参考资料 一、效果展示 图生图的应用场景非常多,比较典型的应用场景有风格转化(真人与二次元)、线稿上色、换装和对图片进行扩图等,下面…...
數據集成平台:datax將hive數據步到mysql(全部列和指定列)
數據集成平台:datax將hive數據步到mysql(全部列和指定列) 1.py腳本 傳入參數: target_database:數據庫 target_table:表 target_columns:列 target_positions:hive列的下標&#x…...
pikachu靶场-File Inclusion
介绍: File Inclusion(文件包含漏洞)概述 文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了&…...
[今天跟AI聊聊职场] ~你能接受你的直接领导能力不如你,年纪还比你小很多吗?
知乎问题: 弟弟今年35岁,刚换了一份工作,直接领导小A比他小5岁,各方面经验没有他成熟。难的工作都是弟弟在做,功劳都被直接领导小A抢走了,有时候还要被直接领导小A打压。弟弟感觉升职加薪无望。现在找工作不…...
网络原理TCP之“三次握手“
TCP内核中的建立连接 众所周知,TCP是有连接的. 当我们在客户端敲出socket new Socket(serverIp,severPort)时,就在系统内核就在建立连接 真正建立连接是在系统内核中建立的,我们程序员只是调用相关的api. 在此处,我们把TCP的建立连接称为三次握手. 系统在内核建立连接时如上…...
990-03产品经理与程序员:什么是 IT 与业务协调以及为什么它很重要?
What is IT-business alignment and why is it important? 什么是IT-业务一致性?为什么它很重要? It’s more important than ever that IT and the business operate from the same playbook(剧本). So why do so many organizations struggle to ach…...
Java Web(七)__Tomcat(二)
Tomcat工作模式 Tomcat作为Servlet容器,有以下三种工作模式。 1)独立的Servlet容器,由Java虚拟机进程来运行 Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作模式。…...
【项目实战】帮美女老师做一个点名小程序(Python tkinter)
前言 博主有一个非常漂亮的老师朋友😍。最近,她急需一个能够实现随机点名的小程序,而博主正好擅长这方面的技术🤏。所以,今天博主决定为她制作一个专门用于点名的小程序💪。 博主在美女老师面前吹完牛皮之…...
Elasticsearch 去重后求和
标题的要求可以用如下 SQL 表示 select sum(column2) from (select distinct(column1),column2 from table)t 要如何用 DSL 实现呢,先准备下索引和数据 PUT test_index {"mappings": {"properties": {"column1": {"type"…...
考研数学——高数:函数与极限(3)
函数的连续性与间断点 函数的连续性 左连续 右连续 区间上的连续性 在xo处连续 函数的间断点 第一类间断点(左右极限都存在) 可去间断点: f(xo-0)= f(xo+0) 跳跃间断点: f(xo-0)≠ f(xo+0) 第二类间断点(震荡间断点、无穷间断点)...
LeetCode49 字母异位词分组
LeetCode49 字母异位词分组 在这篇博客中,我们将探讨 LeetCode 上的一道经典算法问题:字母异位词分组。这个问题要求将给定的字符串数组中的字母异位词组合在一起,并以任意顺序返回结果列表。 问题描述 给定一个字符串数组 strs࿰…...
【Python】Windows本地映射远程Linux服务器上的端口(解决jupyter notebook无法启动问题)
创作日志: 学习深度学习不想在本地破电脑上再安装各种软件,我就用实验室的服务器配置环境,启动jupyter notebook时脑子又瓦特了,在自己Windows电脑上打开服务器提供的网址,那肯定打不开啊,以前在其它电脑上…...
C++面试:用户态和内核态的基本概念、区别
目录 一、基本概念 概念: 区别: 二、Windows示例 基础介绍 用户态到内核态的切换过程: 程序实例 三、Linux示例 特权级别: 用户态到内核态的切换过程: 调度和中断处理: 程序实例 总结 在操作系…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
