当前位置: 首页 > news >正文

C语言 数据结构与算法 I

C语言-数据结构与算法

C语言基础

因为之前写算法都是用C++,也有了些C++基础,变量常量数据类型就跳过去吧。

首先是环境,学C++时候用Clion,C语言也用它写吧~

新建项目,选C执行文件,语言标准。。。就先默认C99吧,反正是测试环境,应该问题不大

image-202308231731119510

直接运行一手

image-202308213173157961

嗯。。JB家的新UI。。真是。。。。。。。一言难尽

指针

好像最开始学C++开始,就一直没玩明白指针,毕竟一用数组链表就直接上STL库,也不太用得到指针

新的学习阶段,从指针开始!

1

#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;
}

image-202308215144721227

如果你的Clion输出乱码,按照以下顺序配置即可解决:

文件——设置——编辑器——文件编码,都改成UTF-8

image-202310825145205006

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

1

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

image-202302825145348845

结构体

使用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};

链表

image-20230906083438591

链表结构体定义

typedef struct node {int data;struct node *next;
} node;

image-20230906090559534

创建单链表

node *createList() {node *head = (node *) malloc(sizeof(node));if (head == NULL) return NULL; // 若内存申请失败,指针会为空(一般情况下不会申请失败)head->data = 0;head->next = NULL;return head;
}

头结点:头指针指向的结点

首元结点:头结点后面的第一个结点

插入新结点

image-20230906093917082

插入新结点的时候要注意,一定先抓住后边的那个结点,再修改前边的那个结点的指针指向。

(必须时刻有指针指向后边结点的位置,不能让后边的结点丢了😉)

删除指定位置结点

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;
}

image-20230906110134438

相关文章:

C语言 数据结构与算法 I

C语言-数据结构与算法 C语言基础 因为之前写算法都是用C&#xff0c;也有了些C基础&#xff0c;变量常量数据类型就跳过去吧。 首先是环境&#xff0c;学C时候用Clion&#xff0c;C语言也用它写吧~ 新建项目&#xff0c;选C执行文件&#xff0c;语言标准。。。就先默认C99吧…...

PHP指定时间戳/日期加一天,一年,一周,一月

PHP指定时间戳加上1天&#xff0c;1周&#xff0c;1月&#xff0c;一年其实是不需要用上什么函数的&#xff01;指定时间戳本身就是数字整型&#xff0c;我们只需要再计算1天&#xff0c;1周它的秒数相加即可&#xff01; 博主搜索php指定时间戳加一天一年&#xff0c;结果许多…...

前端框架 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、设置用户名与邮箱&#xff08;用户标识&#xff0c;必…...

【MySQL基础|第一篇】——谈谈SQL中的DDL语句

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言&#xff…...

移动安全测试框架-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> 该项目所用环境&#xff1a;qt-opensource-windows-x86-mingw491_opengl-5.4.0 2> 配置opencv库路径&#xff1a; 1、在D盘下创建一个opencv的文件夹&#xff0c;用于存放所需材料 2、在opencv的文件夹下创建一个名为&#xff1a;opencv3.4-qt-intall 文…...

使用 ElasticSearch 作为知识库,存储向量及相似性搜索

一、ElasticSearch 向量存储及相似性搜索 在当今大数据时代&#xff0c;快速有效地搜索和分析海量数据成为了许多企业和组织的重要需求。Elasticsearch 作为一款功能强大的分布式搜索和分析引擎&#xff0c;为我们提供了一种优秀的解决方案。除了传统的文本搜索&#xff0c;El…...

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv

opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上&#xff0c;它轻量级而且高效——由一系列 C 函数和少量…...

2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置

转载自&#xff1a;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语言中常用的动态内存管理的函数为&#xff1a; mallo…...

MATLAB R2023a完美激活版(附激活补丁)

MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件&#xff0c;它为Mac用户提供了强大的工具和功能&#xff0c;用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能&#xff1a; 软件下载&#xff1a;MATLAB R2023a完美激活版 …...

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先&#xff0c;这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…...

Vue中过滤器如何使用?

过滤器是对即将显示的数据做进⼀步的筛选处理&#xff0c;然后进⾏显示&#xff0c;值得注意的是过滤器并没有改变原来 的数据&#xff0c;只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器&#xff08;局部过滤器&#xff09;。 目录 全局过滤器 本地过滤器…...

【爬虫】7.4. 字体反爬案例分析与爬取实战

字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例&#xff0c;该案例将真实的数据隐藏到字体文件里&#xff0c;即使我们获取了页面源代码&#xff0c;也无法直接提取数据的真实值。 1. 案例介绍 案例网…...

Linux cat 的作用

Linux中的cat命令用于连接文件并打印到标准输出设备&#xff08;通常是终端&#xff09;。 它的主要作用有以下几点&#xff1a; 查看文件内容&#xff1a;cat命令可用于查看文本文件的内容&#xff0c;将文件的内容从第一行到最后一行打印到终端。 合并文件&#xff1a;cat命…...

Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

转载&#xff1a;电脑知识收藏夹 Blog Archive Windows中的命令行提示符里的Start命令执行路径包含空格时的问题 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题)&#xff0c;第一行Start会成功执行&#xff0c;跳出记事本程…...

【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)

前言 今天&#xff0c;小编我也要进入计算机网络的整个内容&#xff0c;虽然这个计算机网络的内容在考研部分中占比比较小&#xff0c;有些人不把这一部分当成重点&#xff0c;这种想法是错误的。我觉得考研的这四个内容都是非常重要的&#xff0c;我们需要进行全力以赴的对待每…...

学校宿舍智能水电表管理系统:为节约资源保驾护航

随着科技的不断发展&#xff0c;越来越多的学校开始重视宿舍管理的智能化。其中&#xff0c;智能水电表管理系统作为一项重要的基础设施&#xff0c;已经逐渐被各大高校引入。本文将围绕学校宿舍智能水电表管理系统展开详细介绍&#xff0c;让我们一起来了解一下这个节约资源、…...

EasyFalsh移植使用方法

参考&#xff1a;https://blog.csdn.net/Mculover666/article/details/105510837 注意&#xff1a; 这里说的修改默认环境变量后修改环境变量版本号就自动重新写入到flash这句话是有问题的&#xff0c;要开启上面【#define EF_ENV_AUTO_UODATE】宏定义后才会实现该功能&#…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...