C语言 数据结构与算法 I

news2024/11/25 0:27:13

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

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

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

相关文章

你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了

在进行函数计算 Stable Diffusion 答疑的过程中&#xff0c;遇到很多同学在装一些插件的过程中遇到了难题&#xff0c;有一些需要安装一些依赖&#xff0c;有一些需要写一些代码&#xff0c;很多时候安装一个插件就能折腾几天&#xff0c;我们收集了很多同学需要的插件&#xf…

OpenWrt通过终端查询版本

一、cat /etc/banner 二、cat /proc/version 三、cat /etc/openwrt_release 四、uname -a 五、opkg --version

从事网络安全行业 35岁会被淘汰吗?

根据我国信息部门统计显示&#xff1a;今后5年&#xff0c;我国从事网络建设、网络应用和网络服务的新型网络人才&#xff0c;尤其是网络工程师需求将达到60—100万人&#xff0c;而现有符合新型网络人才要求的人还不足20万人。不饱和度高达80%&#xff0c;人才需求量大。 这说…

1065 A+B and C (64bit)

题&#xff1a;点我 题目大意&#xff1a; 这题虽然看着像签到&#xff0c;然鹅签不过去。 因为我最初写的沙雕代码是&#xff1a; #include<iostream> #include<cstdio> using namespace std; int main(void) {int t;scanf("%d", &t);for (int i …

【C++从0到王者】第二十七站:搜索二叉树

文章目录 前言一、二叉搜索树的概念二、二叉搜索树的实现1.二叉树的结点定义2.二叉搜索树的结构3.二叉搜索树的构造函数4.二叉搜索树的插入&#xff08;非递归&#xff09;5.二叉搜索树的中序遍历&#xff08;排序&#xff09;6.二叉搜索树的查找&#xff08;非递归&#xff09…

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

for循环命名

for循环命名 一、需求背景二、基本语法三、具体使用 一、需求背景 当我们使用双重循环查找某个目标&#xff0c;找到后想要在内循环跳出整个双重循环&#xff0c;我们可能想到用一个标志位&#xff0c;在外层循环判断到标志位为true时&#xff0c;跳出外层循环。 例如&#xf…

MySQL数据库和表的操作

数据库基础 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 1、文件的安全性问题 2、文件不利于数据查询和管理 3、文件不利于存储海量数据 4、文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘 内存 为了解决上…

【Spring面试】一、SpringBoot启动优化与最大连接数

文章目录 Q1、SpringBoot可以同时处理多少请求Q2、SpringBoot如何优化启动速度Q3、谈谈对Spring的理解Q4、Spring的优缺点 Q1、SpringBoot可以同时处理多少请求 调试&#xff1a; 写一个测试接口&#xff1a; RestController Slf4j public class RequestController{GetMapping…

找短视频音效、BGM,就上这5个网站

找视频剪辑音效、BGM就上这5个网站下载&#xff0c;免费、付费、商用的全都有&#xff0c;赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站&#xff0c;站内涵盖设计、图片、办公、视频、音效等素材。其中音效素材就…

javaee spring整合mybatis spring帮我们创建dao层

项目结构 pom依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

Excel VSTO开发4 -其他事件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 4 其他事件 针对插件的事件主要有Startup、Shutdown这两个事件&#xff0c;在第2节中已经讲解。在开发窗口中&#xff0c;选择对象…

线程的6种状态

线程的6种状态 状态说明new初始状态&#xff1a;线程被创建&#xff0c;但还没有调用start()方法runnable运行状态&#xff1a;Java线程将操作系统中的就绪和运行两种状态笼统的称作“运行”blocked阻塞状态&#xff1a;表示线程阻塞于锁waiting等待状态&#xff1a;表示线程进…

Direct3D颜色

在Direct3D中颜色用RGB三元组来表示&#xff0c;RGB数据可用俩种不同的结构来保存&#xff0c;第一种是D3DCOLOR&#xff0c;它实际上与DWORD类型完全相同&#xff0c;共有32位&#xff0c;D3DCOLOR类型种的各位被分成四个8位项&#xff0c;每项存储了一种颜色分量的亮度值。 由…

U2Net使用方法和实现多类别语义分割模型改造

作者的碎碎念&#xff1a;U2Net是用来实现SOD的语义分割&#xff0c;本篇论文会介绍算法内容、主要代码、使用方法&#xff0c;以及如何将二分类语义分割修改为多类别语义模型。如果只想知道怎么训练自己的数据集&#xff0c;或者如何修改网络&#xff0c;可以通过目录进行跳转…

【C语言】错题本(2)

题目: 将题目代码粘贴在下面便于分析: #define MAX_SIZE AB struct _Record_Struct {unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;}*Env_Alarm_Record;struct _Record_Struct *pointer (struct _Record_Struct*)m…

【PyCharm Community Edition】:PCAN-USB上位机开发

PCAN-USB上位机开发 一级目录二次开发问题记录继承父类的函数platform.system()判断不准确打开PCANBasic.dll出错延伸阅读一级目录 二次开发 下载链接 问题记录 继承父类的函数 python中super().init() platform.system()判断不准确 根据不同系统,打开DLL的方法不同,本来…

IDEA批量解决Lombok警告,开发者必备技巧!

问题背景 用Lombok的Data注解的时候&#xff0c;因为封装了一个公共的Base基础类&#xff0c;总是会提示以下警告提示&#xff1a; Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. …

软件测试的基础(1)

程序员(开发) :编写程序代码(实现产品需求) 产品:收集并设计需求-需求文档(根据用户需求进行产品设计) UI设计师:设计界面,向外展示的形态 前端:用代码实现页面的显示 DBA:数据库设计(系统数据之间的关联) 运维:版本控制和发布、升级迭代,环境搭建和维护 客服:客户支持,…

jsvmp逆向(补环境篇)

书接上回 上篇文章写到tx的jsxmp的算法逆向&#xff0c;文章链接在这里。初试jsvmp加密 。但是可能有伙伴觉得不够详细。 这里放一个大佬的文章链接。 https://www.52pojie.cn/thread-1521480-1-1.html 。其实就是一个变形的xtea加密。 大佬的文章已经讲了很清楚了&#…