C语言 数据结构与算法 I
C语言-数据结构与算法
C语言基础
因为之前写算法都是用C++,也有了些C++基础,变量常量数据类型就跳过去吧。
首先是环境,学C++时候用Clion,C语言也用它写吧~
新建项目,选C执行文件,语言标准。。。就先默认C99吧,反正是测试环境,应该问题不大

直接运行一手

嗯。。JB家的新UI。。真是。。。。。。。一言难尽
指针
好像最开始学C++开始,就一直没玩明白指针,毕竟一用数组链表就直接上STL库,也不太用得到指针
新的学习阶段,从指针开始!

#include <stdio.h>int main() {int a = 123;int * p = &a;printf("a:%d\n", a);printf("*p:%d\n", *p);printf("a的地址:%p\n", &a);printf("指针p指向的地址:%p\n", p);printf("指针p自身的地址:%p\n", &p);return 0;
}

如果你的Clion输出乱码,按照以下顺序配置即可解决:
文件——设置——编辑器——文件编码,都改成UTF-8

然后点击确定,回到代码页面,点击最下方UTF-8,选择GBK

再点击转换,重新运行即可解决

结构体
使用typedef可以给结构体指定别名
#include <stdio.h>
#include <string.h>
typedef struct Book {char isbn[50];char name[20];int price;
}B;int main() {// 声明struct Book b;// 初始化b.price = 20;strcpy(b.name, "笑场");// 声明同时初始化struct Book a = {"122333123", "冷玚", 45};B c = {"122334233123", "乡土中国", 65};return 0;
}
属性声明的同时进行变量声明
struct Book {char isbn[50];char name[20];int price;
} stu;
属性声明的同时进行变量声明及初始化
struct Book {char isbn[50];char name[20];int price;
} stu = {"1531", "宇宙超度指南", 46};
如果只需要声明一次,可以省略结构体标记
struct {char isbn[50];char name[20];int price;
} stu = {"1531", "宇宙超度指南", 46};
链表

链表结构体定义
typedef struct node {int data;struct node *next;
} node;

创建单链表
node *createList() {node *head = (node *) malloc(sizeof(node));if (head == NULL) return NULL; // 若内存申请失败,指针会为空(一般情况下不会申请失败)head->data = 0;head->next = NULL;return head;
}
头结点:头指针指向的结点
首元结点:头结点后面的第一个结点
插入新结点

插入新结点的时候要注意,一定先抓住后边的那个结点,再修改前边的那个结点的指针指向。
(必须时刻有指针指向后边结点的位置,不能让后边的结点丢了😉)
删除指定位置结点
node *deleteNode(node *head, int pos) {node *currentNode = head;// 如果插入位置比链表长,为非法操作。(头结点data存储链表长度)if (pos > currentNode->data) return NULL;for (int i = 0; i < pos; ++i) {currentNode = currentNode->next;}node *temp = currentNode->next;currentNode->next = currentNode->next->next;// 释放内存free(temp);// 链表长度减一head->data--;return head;
}
输出链表
void printList(node *head) {// 跳过头结点数据node *currentNode = head->next;while (currentNode != NULL) {if (currentNode->next == NULL) {// 是最后一个结点的话不输出箭头printf("%d", currentNode->data);} else {printf("%d->", currentNode->data);}currentNode = currentNode->next;}printf("\n");
}
测试链表相关方法
#include <stdio.h>
#include <stdlib.h>typedef struct node {int data;struct node *next;
} node;// 创建单链表
node *createList() {node *head = (node *) malloc(sizeof(node));if (head == NULL) return NULL;head->data = 0;head->next = NULL;return head;
}// 插入新结点
node *insertNode(node *head, int data, int pos) {node *currentNode = head;// 如果插入位置比链表长,为非法操作。(头结点data存储链表长度)if (pos > currentNode->data) return NULL;for (int i = 0; i < pos; ++i) {currentNode = currentNode->next;}// 新建结点node *newNode = (node *) malloc(sizeof(node));newNode->data = data;// 牵住当前位置下一个结点newNode->next = currentNode->next;// 牵住当前位置上一个结点currentNode->next = newNode;// 链表长度加一head->data++;return head;
}// 删除结点
node *deleteNode(node *head, int pos) {node *currentNode = head;// 如果插入位置比链表长,为非法操作。(头结点data存储链表长度)if (pos > currentNode->data) return NULL;for (int i = 0; i < pos; ++i) {currentNode = currentNode->next;}node *temp = currentNode->next;currentNode->next = currentNode->next->next;// 释放内存free(temp);// 链表长度减一head->data--;return head;
}// 遍历列表
void printList(node *head) {// 跳过头结点数据node *currentNode = head->next;while (currentNode != NULL) {if (currentNode->next == NULL) {// 是最后一个结点的话不输出箭头printf("%d", currentNode->data);} else {printf("%d->", currentNode->data);}currentNode = currentNode->next;}printf("\n");
}int main() {node *l = createList();insertNode(l, 1, 0);insertNode(l, 2, 1);insertNode(l, 3, 0);printList(l);deleteNode(l, 1);printList(l);return 0;
}

相关文章:
C语言 数据结构与算法 I
C语言-数据结构与算法 C语言基础 因为之前写算法都是用C,也有了些C基础,变量常量数据类型就跳过去吧。 首先是环境,学C时候用Clion,C语言也用它写吧~ 新建项目,选C执行文件,语言标准。。。就先默认C99吧…...
PHP指定时间戳/日期加一天,一年,一周,一月
PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多…...
前端框架 vue-admin-template的搭建运行
一介绍 1.1 下载地址 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 1.2 node.js的安装 地址下载node.js 1.6版本 CNPM Binari…...
Git—版本控制系统
git版本控制系统 1、什么是版本控制2、常见的版本控制工具3、版本控制分类3.1、本地版本控制3.2、集中版本控制 SVN3.3、分布式版本控制 Git 4、Git与SVN的主要区别5、Git环境配置6、启动Git7、常用的Linux命令8、Git配置9、设置用户名与邮箱(用户标识,必…...
【MySQL基础|第一篇】——谈谈SQL中的DDL语句
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前言ÿ…...
移动安全测试框架-MobSF WINDOWS 环境搭建
安装python python-3.11.5-amd64.exe 安装Win64OpenSSL-3_1_2.exe 安装VisualStudioSetup.exe github下载安装包 https://github.com/MobSF/Mobile-Security-Framework-MobSF/archive/refs/heads/master.zip GitHub - MobSF/Mobile-Security-Framework-MobSF: Mobile Secur…...
QT连接OpenCV库完成人脸识别
1.相关的配置 1> 该项目所用环境:qt-opensource-windows-x86-mingw491_opengl-5.4.0 2> 配置opencv库路径: 1、在D盘下创建一个opencv的文件夹,用于存放所需材料 2、在opencv的文件夹下创建一个名为:opencv3.4-qt-intall 文…...
使用 ElasticSearch 作为知识库,存储向量及相似性搜索
一、ElasticSearch 向量存储及相似性搜索 在当今大数据时代,快速有效地搜索和分析海量数据成为了许多企业和组织的重要需求。Elasticsearch 作为一款功能强大的分布式搜索和分析引擎,为我们提供了一种优秀的解决方案。除了传统的文本搜索,El…...
视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv
opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量…...
2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置
转载自:https://developer.aliyun.com/article/700370 1. 参数设置 1.1 postgresql.conf中修改 # 1、总的可开启的WORKER足够大 max_worker_processes 128# 2、所有会话同时执行并行计算的并行度足够大 max_parallel_workers64# 3、单个QUERY中并行计算NODE开…...
【C++】动态内存管理
【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为: mallo…...
MATLAB R2023a完美激活版(附激活补丁)
MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件,它为Mac用户提供了强大的工具和功能,用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能: 软件下载:MATLAB R2023a完美激活版 …...
垃圾回收 - 标记压缩算法
压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先,这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…...
Vue中过滤器如何使用?
过滤器是对即将显示的数据做进⼀步的筛选处理,然后进⾏显示,值得注意的是过滤器并没有改变原来 的数据,只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器(局部过滤器)。 目录 全局过滤器 本地过滤器…...
【爬虫】7.4. 字体反爬案例分析与爬取实战
字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例,该案例将真实的数据隐藏到字体文件里,即使我们获取了页面源代码,也无法直接提取数据的真实值。 1. 案例介绍 案例网…...
Linux cat 的作用
Linux中的cat命令用于连接文件并打印到标准输出设备(通常是终端)。 它的主要作用有以下几点: 查看文件内容:cat命令可用于查看文本文件的内容,将文件的内容从第一行到最后一行打印到终端。 合并文件:cat命…...
Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
转载:电脑知识收藏夹 Blog Archive Windows中的命令行提示符里的Start命令执行路径包含空格时的问题 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题),第一行Start会成功执行,跳出记事本程…...
【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)
前言 今天,小编我也要进入计算机网络的整个内容,虽然这个计算机网络的内容在考研部分中占比比较小,有些人不把这一部分当成重点,这种想法是错误的。我觉得考研的这四个内容都是非常重要的,我们需要进行全力以赴的对待每…...
学校宿舍智能水电表管理系统:为节约资源保驾护航
随着科技的不断发展,越来越多的学校开始重视宿舍管理的智能化。其中,智能水电表管理系统作为一项重要的基础设施,已经逐渐被各大高校引入。本文将围绕学校宿舍智能水电表管理系统展开详细介绍,让我们一起来了解一下这个节约资源、…...
EasyFalsh移植使用方法
参考:https://blog.csdn.net/Mculover666/article/details/105510837 注意: 这里说的修改默认环境变量后修改环境变量版本号就自动重新写入到flash这句话是有问题的,要开启上面【#define EF_ENV_AUTO_UODATE】宏定义后才会实现该功能&#…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
