嵌入式学习第十五天

内存管理:

1.malloc 

void *malloc(size_t size);
      功能:
        申请堆区空间
      参数:
        size:申请堆区空间的大小
      返回值:
        返回获得的空间的首地址
        失败返回NULL


2.free

void free(void *ptr);
      功能:
        释放堆区空间
注意:
        1.free只能释放堆区空间
        2.一个空间只能被free一次,多次free程序会崩溃
        3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露

(1)内存溢出:
    内存溢出也称为内存越界
(2)内存泄露:
    程序中malloc的空间没有被释放
(3)内存碎片:
    由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片

链表:

1.定义链表节点结构体:首先需要定义一个结构体来表示链表的节点,该结构体包含一个数据成员和一个指向下一个节点的指针。

2.创建链表节点:创建链表节点时,需要分配内存并初始化数据成员和指针。

3.在链表末尾插入节点:要在链表末尾插入一个节点,需要找到最后一个节点并修改其指针。

4.遍历链表:遍历链表时,从头节点开始,依次访问每个节点,直到到达链表的末尾。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef	int DataType;typedef struct node 
{DataType Data;struct node *pNext;
}LinkNode;LinkNode *CreateLinkList(void)
{LinkNode *pTmpNode = NULL;pTmpNode = malloc(sizeof(LinkNode));if (NULL == pTmpNode){return NULL;}pTmpNode->pNext = NULL;return pTmpNode;
}int InsertHeadLinkList(LinkNode *pHead, DataType TmpData)
{LinkNode *pTmpNode = NULL;pTmpNode = malloc(sizeof(LinkNode));if (NULL == pTmpNode){return -1;}pTmpNode->Data = TmpData;pTmpNode->pNext = pHead->pNext;pHead->pNext = pTmpNode;return 0;
}int ShowLinkList(LinkNode *pHead)
{LinkNode *pTmpNode = NULL;pTmpNode = pHead->pNext;while (pTmpNode != NULL){printf("%d ", pTmpNode->Data);pTmpNode = pTmpNode->pNext;}printf("\n");return 0;
}int ReplaceLinkList(LinkNode *pHead, DataType OldData, DataType NewData)
{LinkNode *pTmpNode = NULL;pTmpNode = pHead->pNext;while (pTmpNode != NULL){if (pTmpNode->Data == OldData){pTmpNode->Data = NewData;}pTmpNode = pTmpNode->pNext;}return 0;
}int DeleteLinkList(LinkNode *pHead, DataType TmpData)
{LinkNode *pPreNode = NULL;LinkNode *pTmpNode = NULL;pTmpNode = pHead->pNext;pPreNode = pHead;while (pTmpNode != NULL){if (pTmpNode->Data == TmpData){pPreNode->pNext = pTmpNode->pNext;free(pTmpNode);pTmpNode = pPreNode->pNext;}else {pTmpNode = pTmpNode->pNext;pPreNode = pPreNode->pNext;}}return 0;
}int DestroyLinkList(LinkNode **ppHead)
{LinkNode *pTmpNode = NULL;LinkNode *pFreeNode = NULL;pTmpNode = pFreeNode = *ppHead;while (pTmpNode != NULL){pTmpNode = pTmpNode->pNext;free(pFreeNode);pFreeNode = pTmpNode;}*ppHead = NULL;return 0;
}int main(void)
{LinkNode *linklist = NULL;linklist = CreateLinkList();InsertHeadLinkList(linklist, 1);InsertHeadLinkList(linklist, 2);InsertHeadLinkList(linklist, 3);InsertHeadLinkList(linklist, 4);InsertHeadLinkList(linklist, 5);ShowLinkList(linklist);ReplaceLinkList(linklist, 5, 50);ReplaceLinkList(linklist, 1, 10);ShowLinkList(linklist);DeleteLinkList(linklist, 50);DeleteLinkList(linklist, 10);ShowLinkList(linklist);DestroyLinkList(&linklist);return 0;
}

作业:

1.封装函数在链表中实现尾插法

 int InsertTailLinkList(LinkNode *pHead, DataType TmpData);

2.从终端接收一个字符串,将字符串倒置后输出

例如:"how are you" -> "you are how"

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

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

相关文章

2024.1.30

快速排序降序 #include<stdio.h> #include<string.h> #include<stdlib.h> int quick_sort(int arr[],int low,int high) {//基准值int keyarr[low];int low1low,high1high;if(low>high) return 0;while(low<high) {//high开始比较while(low1<high1…

直方图均衡化原理与代码实现

1. 简介 直方图均衡化是一种用于增强图像对比度的图像处理技术。通过调整图像的灰度级别分布&#xff0c;直方图均衡化能够使图像中的像素值更加均匀分布&#xff0c;从而增强图像的细节和对比度。 2. 原理 直方图均衡化的原理是通过调整图像的累积分布函数&#xff08;CDF&…

Vue中嵌入原生HTML页面

Vue中嵌入html页面并相互通信 需求&#xff1a;b2b支付需要从后获取到数据放到form表单提交跳转&#xff0c;如下&#xff1a; 但是vue目前暂时没找到有类似功能相关文档&#xff0c;所以我采用iframe嵌套的方式 1. Vue中嵌入Html <iframe src"/static/gateway.htm…

C++类和对象(中)六个默认成员函数

&#x1f308;类的六个默认成员函数 任何一个类&#xff0c;不管是否为空&#xff0c;都会在生成的时候默认调用六个成员函数&#xff0c;这些成员函数可以自动生成&#xff0c;也可以由程序员写出。这六个默认成员函数分别是&#xff1a; 最主要的是前四个&#xff1a; 初始…

小红书论文刷新 SOTA:人体动作预测再升级,能精准到指尖

想象一下&#xff0c;你在玩一款 VR 游戏&#xff0c;准备伸手拿起一个虚拟杯子喝水。‍​​‌​‌​‎‎ 在传统的交互系统中&#xff0c;这通常需要你按下控制器上的特定按钮。但如果游戏集成了 EAI 框架&#xff0c;这一过程将变得无比自然。当你的手缓缓接近虚拟杯子时&…

初识C语言·文件操作

目录 1 关于文件 i)文件的基本知识 ii)数据文件的分类 2 文件打开和关闭 i)流和标准流 ii)文件指针 iii)文件打开和关闭 3 文件的顺序读写 i) fgetc fputc ii) fgets fputs iii) fscanf fprintf iv) fwrite fread 4 对比一组函数 scanf/fscanf/sscanf/printf/fpri…

Django视图函数技巧,从入门到实战

文章目录 Django视图函数1.request对象的方法2.视图函数的常用的返回对象&#xff08;1&#xff09;response对象&#xff08;2&#xff09;JsonResponse对象&#xff08;3&#xff09;redirect() &#xff1a;给浏览器了一个30x的状态码 3.设置响应头和状态码&#xff08;1&am…

springboot-前后端分离——第二篇

本篇主要介绍一个发送请求的工具—postman&#xff0c;然后对请求中的参数进行介绍&#xff0c;例如简单参数、实体参数、数组参数、集合参数、日期类型参数以及json类型参数&#xff0c;对这些参数接收进行总结。最后对响应数据进行介绍&#xff0c;使用统一响应结果返回浏览器…

01背包问题 动态规划

01背包问题 动态规划 01背包问题 动态规划写了点代码 C#实现程序运行结果代码和程序已经上传 01背包问题 动态规划 很有意思的问题。 写了点代码 C#实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Ta…

Oracle函数使用

ROW_NUMBER函数 ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY column2 DESC) -- 根据column1分组按column2降序排序生成序号&#xff0c;序号由小到大,会生成一个唯一的序号 -- 例如column2中有两列值都为1,那他们的序号会有一个在上一个在下ROW_NUMBER() OVER(ORDER BY …

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…

Android悬浮窗实现步骤

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…