day 18——————数据结构单向链表

ops/2024/12/16 14:36:22/

数据结构

要点

1总结:

  1. 常用的逻辑关系和物理结构
    逻辑关系指的是数据之间的关系
    1.集合
    2,线性结构:一对一(数组,链表,栈等)
    3.树形结构:一对多(二叉树)
    4,图形,多对多
    物理结构:
    顺序结构(数组),内存空间连续
    链式结构(链表),不连续
    散列结构(哈希存储):将储存位置与关键码之间确立对应关系进行查找的储存方式
    索引:通过索引表

  2. 顺序存储结构和链式存储结构的区别,什么场景使用
    顺序结构:

              1. 访问数据方便(O(1)--时间复杂度)2. 数据插入和删除需要移动大量数据3. 需要预分配内存空间4. 可能会造成内碎片
    

链式结构:在内存中选取一段非连续的内存空间(链表

             1. 访问元素必须通过遍历(O(n))2. 插入和删除数据方便3. 不需要预分配内存空间(动态的存储结构)
  1. 单向链表基础操作(见下)
  2. 内存碎片
    内部碎片:内部碎片是指分配给程序的内存块比实际需要的内存稍大,导致部分内存未被使用(数组)
    外部碎片:内存中有足够的总空闲空间,但由于这些空闲空间是不连续的,无法满足一次大的内存分配请求。
  3. 内存泄露
    是指程序在动态分配内存后,未能正确释放这些内存,导致内存无法被重新利用。最终有可能崩溃。
    7.指针函数:返回值是指针的函数,这个返回值不能是局部变量(会悬空指针)
    可以返回全局变量,静态变量,从堆申请的的地址。

2 单项链表基础操作

单向链表的创建,遍历,头尾添加删除``

#include"link.h"
#include<stdio.h>
#include<stdlib.h>/************************ 功能:创建有头单向链表*返回值:*  成功:返回头节点地址*  失败:返回NULL*  ******************/link_node * creat_link()
{link_node *phead = malloc(sizeof(link_node));if(NULL == phead)//检查是否开出内存{printf("fail malloc\n");return NULL;}else{phead->pnext = NULL;return phead;}
}/************************功能:头插*返回值:成功0;失败-1;*参数:phead(头节点地址)data(插入的值)**********************/int insert_head_link(link_node *phead,data_type data)
{link_node *pinsert = malloc(sizeof(link_node));if(NULL == pinsert ){printf("fail malloc\n");return -1;}pinsert->data = data;pinsert->pnext = phead->pnext;phead->pnext = pinsert;return 0;
}/************************功能:遍历*参数:phead(头节点地址)**********************/
void link_for_each(link_node *phead)
{link_node *p =phead->pnext;while(p != NULL){printf("%d\n",p->data);p = p->pnext;}
}/****************** 功能;判断是否是空链表* 返回值*      是:1 ;否 0;*  参数:头节点地址*  ******************/int is_empty_link(link_node *phead)
{if(NULL == phead->pnext){return 1;}elsereturn 0;
}/************************功能:尾插*返回值:成功0;失败-1;*参数:phead(头节点地址)data(插入的值)**********************/int insert_tail_link(link_node *phead,data_type data)
{link_node *pinsert = malloc(sizeof(link_node));if(NULL == pinsert){printf("fail malloc");return -1;}pinsert->data = data;pinsert->pnext = NULL;link_node *p = phead;while(NULL != p->pnext){p = p->pnext;}p->pnext = pinsert;return 0;
}/************************功能:头删*返回值:成功0;*参数:phead(头节点地址)**********************/int delete_head_link(link_node *phead)
{if(is_empty_link(phead)){return 0;}link_node *pdel = phead->pnext;phead->pnext = pdel->pnext;free(pdel);return 0;
}/************************功能:尾删*返回值:成功0;*参数:phead(头节点地址)**********************/int delete_tail_link(link_node *phead)
{if(is_empty_link(phead)){return 0;}link_node *p=phead;while(NULL != p->pnext->pnext){    p = p->pnext;  }    p->pnext = NULL;free(p->pnext);}

2.注意快速排序如果基准值定第一个要先从右向左找

void swap(int *a, int *b)
{int temp = *a;*a = *b;*b = temp;
}int quick_sort(int *begin, int *end)
{if (begin >= end){return 0;}int *p = begin;int *q = end;int *c = begin;//基准while(begin < end){while(begin < end && *end >= *c){--end;}while(begin < end && *begin<=*c){++begin;}swap(begin ,end);}swap(c,begin);quick_sort(p,begin-1);quick_sort(begin+1,q);return 0;
}int main()
{int  c[12] = {23,56,341,453,31,12,454,1235,1,2342,3};quick_sort(c,c+11);int i;for(i=0;i<12;i++){printf("%d\n",c[i]);}return 0;
}

3思维导图

在这里插入图片描述


http://www.ppmy.cn/ops/142393.html

相关文章

数组的最大美丽值(区间最大重叠次数)

一、题目描述 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操作中&#xff0c;你可以执行下述指令&#xff1a; 在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。将 nums[i] 替换为范围 [nums[i] - k, nums[i] k] 内的任一整数。 …

安装pycuda 报错:#include <cuda.h>

问题&#xff1a;pip install pycuda安装pycuda 报错如下 src/cpp/cuda.hpp:14:18: fatal error: cuda.h: No such file or directory #include <cuda.h>^ error: command /usr/bin/gcc failed with exit code 1解决1&#xff1a; pip install cuda-python12.1.0 -i ht…

活动预告 | Microsoft 365 在线技术公开课:让组织针对 Microsoft Copilot 做好准备

课程介绍 通过Microsoft Learn免费参加Microsoft 365在线技术公开课&#xff0c;建立您需要的技能&#xff0c;以创造新的机会并加速您对Microsoft云技术的理解。参加我们举办的“让组织针对 Microsoft Copilot for Microsoft 365 做好准备” 在线技术公开课活动&#xff0c;学…

【NLP 14、激活函数 ② tanh激活函数】

学会钝感力&#xff0c;走向美好的方向 —— 24.12.11 一、tanh激活函数 1. tanh函数的定义 tanh是双曲正切函数&#xff08;Hyperbolic Tangent&#xff09;&#xff0c;数学表达式为 其函数图像是一个S型曲线&#xff0c;以原点 (0&#xff0c;0) 为中心对称&#xff0c;定…

windows下pyenv与宝塔python冲突解决

windows下安装pyenv后与宝塔python环境冲突 1、将C:\Program Files\python\Scripts中的pip3.exe改名(pip3-.exe) 2、将C:\用户\{用户名}\.pyenv\pyenv-win\shims中的pip、pip.bat、python、python.bat改名(pip-、pip-.bat、python-、python-.bat)&#xff0c;然后使用pip3和p…

前端成长之路:HTML(3)

在HTML中&#xff0c;有列表标签。列表最大的特点是整齐、简洁、有序&#xff0c;用列表进行布局会更加自由方便。根据使用的情景不同&#xff0c;可以将列表分为三大类&#xff1a;无序列表、有序列表和自定义列表。 无序列表 在HTML中使用<ul>标签定义一个无序列表&a…

Scala泛型应用场景

Scala中的泛型&#xff08;Generics&#xff09;是一种强大的工具&#xff0c;允许开发者编写可重用的代码&#xff0c;同时保持类型安全。泛型在Scala中有多种应用场景&#xff0c;以下是一些常见的应用场景&#xff1a; 集合类&#xff1a; Scala的集合类&#xff08;如List…

华为HarmonyOS帮助应用实现在线认证服务 -- 3 IFAA免密身份认证

场景介绍 开通&#xff1a;提供移动端开通生物特征&#xff08;指纹/3D人脸&#xff09;IFAA免密身份认证的能力。使用用户已有的生物特征类型进行开通&#xff0c;会开通移动端对应生物特征类型的IFAA免密身份认证能力。 认证&#xff1a;提供移动端认证生物特征&#xff08…