C语言学习--链式结构

结构体的应用:
//数据结构与算法
             数据结构 ---- 指的是 数据的组织形式  

数组 --- 数据结构
             数组特点
             连续性,有序性,单一性

数据操作(访问)时的特点

--------------------------------------------------------------
数组:
    数据结构体---操作时候的特点,     //特点决定他应用的场合
                 优势, s[i] 随机访问(随机存取)---> 存 拿数据很方便
                 不足: 插入数据 删除数据 不方便

链表
      链式数据结构;
struct stu s1;
struct stu s2;
struct stu s3;
 
     s1->s2->s3    
  特点:
    优势:增加和删除数据 很方便  
    不足:存和取数据的时候不方便,没有数组方便
    
[数据]
[指针]    
      
节点

struct Node
{
    int data;    //数据域 --存储要处理的数据
    struct Node*next;  //保存地址--指向下一个节点
};         //节点类型      

struct Node n1;
struct Node n2;
struct Node n3; 

链式存储的样子:

[数据n1]        [数据n2]      [数据n3] 
[指针&n2]        [指针&n3]      [指针 xxx ]  
  n1             n2            n3 
      
----------------------------------
有头链表和无头链表
无头--第一个节点数据与为随机值或者无效值
有头--第一个节点不存有效数据     //作用:为了更方便的操作链表

C语言中 ---> 主要研究  “有头单项链表“

头节点 ---数据域值随机
首节点 ---第一个保存有效数据的节点
尾节点 ---链表的最后一个有效节点 NULL。

操作: //数据结构体 数据的处理 --> 增删改查
1、创建一个链表
    //空链表 -- 只有头节点 ,但没有有效的数据节点
    struct Node *createEmptyLinklist(struct Node **head)
{
    //struct Node *head = malloc(sizeof(struct Node));
    *head = malloc(sizeof(struct Node));
    (*head)->next = NULL;
    return *head;
}

    
头加
void pushFront(struct Node *head,int dt)
{
    struct Node *new = malloc(sizeof(struct Node ));
    new->data = dt;
    
    //s2 
    new->next = head->next;

    //s3 
    head->next = new;
}

 尾加
 void pushBack(struct Node *head,int dt)
{
    //s1 
    struct Node *new = malloc(sizeof(struct Node));
    new->data = dt;
    //s2
    struct Node *p = head;
    while (p->next!=NULL)
    {
        p = p->next;
    }
    //s3 
    p->next = new;
    new->next = NULL;
}

 
 
 
 
头删
void popFront(struct Node *head)
{
    
    struct Node *p = head->next;
    head->next = p->next;
    free(p);
}


 尾删
    void pushBack(struct Node *head,int dt)
{
    //s1 
    struct Node *new = malloc(sizeof(struct Node));
    new->data = dt;
    //s2
    struct Node *p = head;
    while (p->next!=NULL)
    {
        p = p->next;
    }
    //s3 
    p->next = new;
    new->next = NULL;
}
  
      
销毁链表:
      void destroyLinklist(struct Node **head)
{
    while (isEmpty(*head) == 0)
    {
        popFront(*head);
    }
  
    free(*head);
    *head=NULL; 
}

计算链表长度:
int length(struct Node *head)

    struct Node *p = head->next; 
    int cnt = 0;
    while (p != NULL)
    {
        cnt++;
        p = p->next;
    }

    return cnt;
}
  
输出链表数据:
void printLinklist(struct Node *head)
{
    struct Node *p = head->next; //

    while ( p!= NULL)
    {
        printf("%d\n",p->data);
        p = p->next;
    }
}
      
      

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

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

相关文章

Ubuntu24.04记录网易邮箱大师的安装

邮箱大师下载 官网自行下载,下载后文件名“mail.deb" https://dashi.163.com/ 安装发现缺少依赖 #mermaid-svg-8wqpqFSBVOPD7NGP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8wqpqFSBVOPD7NGP …

PIVOT函数-动态列

一、需求说明 原始表&#xff1a; select * from pathogen_pro; 将pm_name的值转成对应的列&#xff0c;效果如下 二、PIVOT函数说明 PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后…

Julia编程11:变量作用域 Scope of Variables

There are two main types of scopes in Julia, global* scope* and local* scope*. Julia有全局变量作用域和局部变量作用域&#xff0c;函数或者一些结构体、循环体如for等是否内部是局部环境可以参照下表。 ConstructScope typeAllowed withinmodule, baremoduleglobalglo…

.Net 基于.Net8开发的一个Asp.Net Core Webapi后端框架

1.项目结构 该项目是基于.net8开发的Asp.Net Core WebApi后端服务,集成了Efcore,Autofac,Jwt,AutoMapper,Serilog,Quartz,MiniExcel等组件。该框架简单易上手&#xff0c;没有额外的学习成本; 该项目采用了多层结构设计&#xff0c;有利于解耦&#xff0c;包含公共层&#xff0…

Linux入门学习指南

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

MySQL数据库整体知识点简述

目录 第一章&#xff1a;数据库系统概述 第二章&#xff1a;信息与数据模型 第3章 关系模型与关系规范化理论 第四章——数据库设计方法 第六-七章——MySQL存储引擎与数据库操作管理 第九章——索引 第10章——视图 第11章——MySQL存储过程与函数 第12章——MySQL 触…

【SIPMRCP】freeswitch中的transfer和bridge有什么区别

在FreeSWITCH中&#xff0c;transfer和bridge是两个用于处理通话的不同概念&#xff0c;它们之间的主要区别体现在功能和用途上。以下是关于这两个概念的清晰解释和区别&#xff1a; transfer&#xff08;转移&#xff09; 功能&#xff1a;transfer主要用于将通话从一个目标…

IIS7整合Tomcat9服务器,并搭建ASP+PHP+JSP完整运行环境

本文以Windows Vista系统为例&#xff0c;详细讲解IIS7整合Tomcat服务器&#xff0c;同时支持ASPPHPJSP三种Web动态网页技术的方法。 Vista系统自带的IIS版本为7.0&#xff0c;能安装的IE浏览器的最高版本为IE9。IE9也是Vue2前端框架支持的最低浏览器版本。 【准备工作】 去微…

【TB作品】msp430g2553单片机,读取GY-30光强,串口发送

硬件 //GY-30 //SCL–P1.4 //SDA–P1.5 //VCC–3.3V //GND–GND //ADDR–不接 部分程序 #include <msp430.h> #include "gy30.h"void Send_Byte(char data) {while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?UCA0TXBUF data…

蓝桥杯物联网竞赛_STM32L071_20_用printf将数据显示在OLED上

需求&#xff1a; 第十五届国赛确实有点变态&#xff0c;显示部分大概有6个所以需要大量将sprintf与OLED_ShowString配合使用才能显示相应格式的数据&#xff0c;所以我在想能不能简化一下这一部分直接用写好的printf语句将数据显示到显示屏上呢&#xff1f; 代码&#xff1a…

树--搜索二叉树

现有一棵结点数目为n的二叉树&#xff0c;采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域&#xff0c;而结点为n的二叉树一共有n-1条有效分支路径。那么&#xff0c;则二叉链表中存在2n-(n-1)n1个空指针域。那么&#xff0c;这些空指针造成了空间浪费。 例…

【TB作品】msp430g2553单片机,秒表,LCD1602,Proteus仿真

功能 秒表 动图&#xff1a; 部分代码 这段代码是用C语言编写的&#xff0c;用于在基于德州仪器MSP430微控制器的平台上实现一个简易的电子秒表功能。 #include <msp430.h> #include "LCD.h"unsigned int second 0; unsigned int millisecond10…

【HarmonyOS】应用振动效果实现

一、问题背景&#xff1a; 应用在强提醒场景下&#xff0c;一般会有马达振动的效果&#xff0c;提示用户注意力的关注。 比如消息提醒&#xff0c;扫码提示&#xff0c;删除键确认提示等。 针对高定制化或者固定的振动方式&#xff0c;我们需要有不同的方案实现&#xff0c;马…

php项目加密源码

软件简介 压缩包里有多少个php就会被加密多少个PHP、php无需安装任何插件。源码全开源 如果上传的压缩包里有子文件夹&#xff08;子文件夹里的php文件也会被加密&#xff09;&#xff0c;加密后的压缩包需要先修复一下&#xff0c;步骤&#xff1a;打开压缩包 》 工具 》 修…

【云原生】Kubernetes----Ingress对外服务

目录 引言 一、K8S对外方式 &#xff08;一&#xff09;NodePort 1.作用 2.弊端 3.示例 &#xff08;二&#xff09;externalIPs 1.作用 2.弊端 3.示例 &#xff08;三&#xff09;LoadBalancer 1.作用 2.弊端 &#xff08;四&#xff09;Ingress 二、Ingress的…

Linux文件I/O与标准I/O缓冲机制及性能分析

目录 1、文件I/O 1.1、数据缓冲机制 1.2、性能影响 2、标准I/O 2.1、数据缓冲机制 2.2、性能影响 3、文件I/O与标准I/O的对比 在Linux中&#xff0c;文件I/O和标准I/O是两种常见的I/O操作方式&#xff0c;它们在数据缓冲的原理和机制上有所不同。理解这些原理和机制对优…

gitea的git库备份与恢复

文章目录 gitea库的备份与恢复概述笔记实验环境更新git for windows更新 TortoiseGit备份已经存在的gitea的git库目录使用gitea本身来备份所有git库目录将gitea库恢复到新目录m1m2m3启动gitea - 此时已经恢复完成FETCH_HEAD 中有硬写位置再查一下app.ini, 是否改漏了。m1m2 总结…

容器中运行ip addr提示bash: ip: command not found【笔记】

容器中运行ip addr提示bash: ip: command not found 原因没有安装ip命令。 rootdocker-desktop:/# ip addr bash: ip: command not found rootdocker-desktop:/# apt-get install -y iproute2

谷歌广告怎么开户?Google推广开户费用、代运营流程、代理开户、投放价格

谷歌推广&#xff08;Google Ads广告&#xff09;是指Google公司面向全球用户&#xff0c;在其自有搜索引擎、YouTube视频、Gmail邮箱等各类自有产品提供的广告位中&#xff0c;展示的各类互联网广告。谷歌广告&#xff0c;有很多种衍生的叫法&#xff1a;谷歌SEM、谷歌竞价、谷…

涡轮流量传感器

涡轮流量传感器是一种精密的流量测量仪表&#xff0c;广泛应用于石油、化工、冶金、科研等领域的计量和控制系统。配备有卫生接头的涡轮流量传感器还可以应用于制药行业。该传感器的主要工作原理基于流体动力学和电磁感应原理&#xff0c;当流体流经传感器时&#xff0c;流体的…