链表简单功能的总结

下面我将通过创建链表,实现链表的增删,打印,对链表进行复习

头文件:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct ListNode 
{
    int data;
    struct ListNode* next;
}SLI;
SLI* create(int x);
void ADDFRONT( SLI** head , int x );
void PRINT( SLI* head );
void ADDTAIL( SLI** head ,int x );
void DELETEFRONT( SLI** head );
void DELETETAIL( SLI** head );
SLI* FIND( SLI* head ,int x );
void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x );
void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x );
void DELETE_SPECIFIC( SLI** head , SLI* pos );

具体实现的函数:

#include "SList.h"

SLI* create(int x)
{
    SLI* pf = (SLI*)malloc(sizeof(SLI));
    if( pf == NULL )
    {
        perror("fail");
        exit(1);
    }
    pf->data = x;
    pf->next = NULL;
    return pf;
}
void ADDFRONT( SLI** head , int x )
{
    SLI* pf = create(x);
    if( (*head) == NULL )
        *head = pf;
    else
    {
    pf->next = *head;
    *head = pf;
    }
}
void PRINT( SLI* head )
{
    while( head )
    {
        printf("%d->",head->data);
        head = head->next ;
    }
    printf("NULL\n");
}
SLI* FINDTAIL(SLI** head)
{
    SLI* pf = *head;
    while( pf->next != NULL )
    {
        pf = pf->next;
    }
    return pf;
}
void ADDTAIL( SLI** head ,int x )
{
    SLI* pf = create(x);
    SLI* tail = NULL;
    
    assert(head);
    if( *head == NULL )
    {
        *head = pf;
    }
    else
    {
    tail = FINDTAIL(head);
    tail->next = pf;
    }
}

void DELETEFRONT( SLI** head )
{
    SLI* pf = (*head)->next;
    assert(head);
    assert(*head);
    free(*head);
    *head = pf;
}
void DELETETAIL( SLI** head )
{
    SLI* pf = *head;
    assert(head);
    assert(*head);
    if( (*head)->next == NULL )
    {
        return;
    }
    else
    {
        while( pf->next->next != NULL )
        {
            pf = pf->next ;
        }
        pf->next = NULL;
        return;
    }
}
void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x )
{
    SLI* a = *head;
    SLI* pf = create(x);
    assert(head);
    assert(*head);
    assert(pos);
    if( pos == *head )//相当与头插
    {
        ADDFRONT( head , x );
        return;
    }
    while( (*head)->next != pos )
    {
        *head = (*head)->next ;
    }
    pf->next = (*head)->next ;
    (*head)->next = pf;
    *head = a;
}
SLI* FIND( SLI* head ,int x )
{
    while( head )
    {
        if(head->data == x)
            return head;
        head = head->next ;
    }
    return NULL;
}
void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x )
{
    SLI* pf = create(x);
    if( pos->next == NULL )
    {
        pos->next = pf;
        return;
    }
    else
    {
        pf->next = pos->next ;
        pos->next = pf;
        return;
    }
}
void DELETE_SPECIFIC( SLI** head , SLI* pos  )
{
    SLI* pf = *head;
    if( *head == pos )//当pos为首节点
    {
        *head = (*head)->next ;
        free(pf);
        pf = NULL;
        return;
    }
    while( pf->next != pos )
    {
        pf = pf->next;
    }
    pf->next = pf->next->next ;
}

测试函数:这里可以随意实现

#include "SList.h"
int main()
{
    SLI* pf;
    SLI* head = NULL;
    //ADDFRONT( &head , 1 );
    //ADDFRONT( &head , 2 );
    //ADDFRONT( &head , 3 );
    ADDTAIL( &head ,1);
    ADDTAIL( &head ,2);
    ADDTAIL( &head ,3);
    pf = FIND( head ,1 );
    DELETE_SPECIFIC(&head,pf);
    //ADD_SPECIFICTAIL(&head , pf ,2 );
    PRINT(  head );
    /*PRINT(  head );
    DELETETAIL( &head );
    DELETEFRONT( &head );
    PRINT(  head );*/
}

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

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

相关文章

Laya2.13.3在Web条件下使用键盘控制相机移动

需求&#xff1a;在Laya开发时&#xff0c;常常没法移动相机来观察场内的环境&#xff0c;故制作一个移动相机的脚本来是实现此功能&#xff0c;目前先使用键盘后续会添加鼠标控制移动旋转等功能。 onEnable(){this.camera new Laya.Camera(0, 0.1, 100);this._tempVector3 n…

工业镜头的重要参数之视场、放大倍率、芯片尺寸--51camera

今天来简单介绍下工业镜头中常用的参数中的三个&#xff1a; 1、视场 视场&#xff08;FOV&#xff09;也称视野,是指能被视觉系统观察到的物方可视范围。 对于镜头而言&#xff0c;可观察到的视场跟镜头放大倍率及相机芯片选择有关。因此需要根据被观察物体的尺寸&#xff…

Python:模块和包

9.1模块化编程 对于一个真实的Python编程&#xff0c;不可能自己完成所有的工作&#xff0c;通常需要借助第三方类库。此外&#xff0c;也不可能在一个源文件中编写整个程序的源代码&#xff0c;这些都需要以模块化的方式来组织项目的源代码。 9.1.1 导入模块的语法 import导…

史上最全的大数据开发八股文【自己的吐血总结】

自我介绍 我本硕都是双非计算机专业&#xff0c;从研一下开始学习大数据开发的相关知识&#xff0c;从找实习到秋招&#xff0c;我投递过100公司&#xff0c;拿到过10的offer&#xff0c;包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂&#xff08;岗位都是大数据开发&#…

快速上手:在 Android 设备上运行 Pipy

Pipy 作为一个高性能、低资源消耗的可编程代理&#xff0c;通过支持多种计算架构和操作系统&#xff0c;Pipy 确保了它的通用性和灵活性&#xff0c;能够适应不同的部署环境&#xff0c;包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V …

如何用java来实现tr369协议

要用Java实现TR-369协议&#xff0c;您需要做以下几个步骤&#xff1a; 一、理解TR-369协议规范&#xff1a; 首先&#xff0c;您需要仔细阅读和理解TR-369协议的规范文档。这将帮助您理解协议的各个组成部分&#xff0c;包括数据模型、管理接口、消息格式、通信流程等。 二…

根据用户名称实现单点登录

一、参数格式 二、后端实现 Controller层 public class IAccessTokenLoginController extends BaseController {Autowiredprivate ISysUserService sysUserService;Autowiredprivate ISingleTokenServiceImpl tokenService;/*** 登录方法** return 结果*/PostMapping("/l…

器件选型【二极管,电感篇】

二极管篇&#xff1a; 一句话总结&#xff1a;二极管选型时主要考虑二极管的最大反向电压&#xff0c;反向电流&#xff0c;最高工作频率&#xff08;由结电容决定&#xff09;,反向恢复时间 二极管的主要作用是防反接&#xff0c;续流 二极管结电容: 在高频电路中&#xff…

JeecgBoot Vue3前端项目性能优化按需加载方案

JeecgBoot vue3前端项目在 3.5.5 版本之前&#xff0c;的确存在很严重的性能问题&#xff0c;大家可以参考以下文档进行升级。 按需加载改造方法 1、全局注册地方去掉2、组件改成异步注册3、用不到的大组件可以删掉 【精简项目方案】 大组件 1、富文本 tinyme2、Markdown3、…

NVIDIA GTC 2024将回归线下

NVIDIA 宣布将于 3 月 18 日至 21 日在圣何塞会议中心举办 GTC 2024 大会。预计将有超 30 万人亲临现场或线上注册参会。NVIDIA 创始人兼首席执行官黄仁勋将于太平洋时间 3 月 18 日&#xff08;星期一&#xff09;下午 1 点&#xff0c;即北京时间 3 月 19 日&#xff08;星期…

前端- 基础 表单标签 - 使用场景及组成

大家都有到银行去办理业务的时候&#xff0c;大多数情况下会填一些 纸质的表之类的东西如下图 而我们在网页中也会经常遇到 像现实生活中在银行填表那样的情景&#xff0c;如下图 &#xff1a; 上示就是 网页中的表单的使用场景了 表单标签 &#xff1a; 为什么需要表单 …

jetpack5.02版本自带默认cuda cudnn,tensorrt路径

参考jetpack5.02版本自带默认cuda cudnn&#xff0c;tensorrt路径_修改为自己的tensorrt头文件路径-CSDN博客

290. Word Pattern一个击败了100C++用户的代码

题目描述 Given a pattern and a string s, find if s follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s. Example 1&#xff1a; Input: pattern “abba”, s “dog c…

吴恩达机器学习笔记:第5周-9 神经网络的学习1(Neural Networks: Learning)

目录 9.1 代价函数9.2 反向传播算法9.3 反向传播算法的直观理解 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法&#xff1a; 假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;…

【2024】使用Vuetifi搭建vue3+Ts项目,并使用tailwind.css

目录 使用Vuetifi搭建项目使用tailwind.css 只要跟着官方文档来就不会出错。 使用Vuetifi搭建项目 npm create vuetifyyarn create vuetifypnpm create vuetifybun create vuetify在终端运行一个就行&#xff0c;之后就可以选配置了。 使用tailwind.css 先运行&#xff1a; …

【数据结构】数组、双链表代码实现

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

GPU服务器的主要用途有哪些?

GPU服务器的核心是基于图形处理器的计算服务&#xff0c;主要是用来处理大量计算和图形处理的计算设备&#xff0c;与CPU服务器相比&#xff0c;GPU服务器的计算能力更强。接下来我们就来聊一聊GPU服务器的主要用途有哪些吧&#xff01; GPU服务器的高性能计算可以用在进行一些…

Spring中最常用的11个扩展点

前言 我们一说到spring&#xff0c;可能第一个想到的是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 没错&#xff0c;它们是spring的基石&#xff0c;得益于它们的优秀设计&#xff0c;使得spring能够从众多优秀框架中脱颖而出。 除…

尚硅谷Java数据结构--遍历线索化二叉树

线索化二叉树实现线性遍历&#xff0c;无需递归&#xff0c;遍历效率提高✨✨✨ package DataStructure;public class ThreadedBinaryTreeDemo {public static void main(String[] args) {Node n3new Node(8);Node n4new Node(10);Node n5new Node(14);Node n1new Node(3,n3,n4…

工业控制系统网络安全防护指南

导 读 为适应新型工业化发展形势&#xff0c;提高我国工业控制系统网络安全保障水平&#xff0c;指导工业企业开展工控安全防护工作&#xff0c;以高水平安全护航新型工业化高质量发展&#xff0c;工业和信息化部印发《工业控制系统网络安全防护指南》。《防护指南》定位于面向…