C语言 数据结构与算法 I

这篇具有很好参考价值的文章主要介绍了C语言 数据结构与算法 I。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言-数据结构与算法

C语言基础

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

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

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

直接运行一手

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

指针

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

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

结构体

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

链表

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

链表结构体定义

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

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

创建单链表

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

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

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

插入新结点

C语言 数据结构与算法 I,C语言数据结构与算法,考研,c语言,开发语言,数据结构

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

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

删除指定位置结点

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语言,开发语言,数据结构文章来源地址https://www.toymoban.com/news/detail-707553.html

到了这里,关于C语言 数据结构与算法 I的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构和算法——用C语言实现所有图状结构及相关算法

    本文所有代码均在仓库中,这是一个完整的由纯C语言实现的可以存储任意类型元素的数据结构的工程项目。 首先是极好的工程意识,该项目是一个中大型的CMake项目,结构目录清晰,通过这个项目可以遇见许多工程问题并且可以培养自己的工程意识。 其次是优秀的封装性(

    2024年02月06日
    浏览(222)
  • 王道考研数据结构——链表

    找到头节点就相当于找到了整个链表 Linklist Lnode*是一个东西 大部分使用的带头结点,比较方便!带头结点只维护指针域,不维护数据域 找前驱节点+插入节点(可以单独封装成一个函数)  如果不带头节点的话,那么插入和删除头节点的话都需要特殊处理,即重新修改头指针的

    2024年02月16日
    浏览(59)
  • 数据结构【考研笔记】

    1、基本概念 1)数据 数据是 信息的载体 ,是描述客观事物属性的数、字符及所有 能输入到计算机中并被计算机程序识别和处理的符号 的集合。数据是计算机程序加工的原料。 2)数据元素、数据项 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据

    2024年02月12日
    浏览(48)
  • 考研真题数据结构

    【2018年山西大学真题】试编写一个算法,使之能在数组L【1~n】中找到最小元素。 (1)给出算法的基本思想。 (2)根据设计思想,给出描述算法。 (3)分析所给算法的时间复杂度。 (1)算法基本思想: 1. 假设数组中的第一个元素为当前的最小元素,将其保存在一个变

    2024年02月04日
    浏览(42)
  • 数据结构与算法——排序(C语言实现)

    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 🌟🌟 追风赶月莫停留 🌟🌟 🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀 🌟🌟 平芜尽处是春山

    2024年04月09日
    浏览(59)
  • C语言 数据结构与算法 I

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

    2024年02月09日
    浏览(41)
  • C语言 数据结构--栈 括号匹配算法

    今天这一期使用栈来完成括号匹配算法 ① 栈结构 ② 初始化栈 ③ 入栈 ④ 出栈 ⑤ 判断栈是否为空 ⑤ 括号匹配 完整代码: 结果: (1)括号序列为char str[]={\\\'(\\\',\\\'{\\\',\\\'[\\\',\\\']\\\',\\\'}\\\',\\\')\\\'}; (2)括号序列为char str1[]={\\\'{\\\',\\\'(\\\',\\\'}\\\',\\\']\\\'};    

    2024年02月05日
    浏览(53)
  • 考研数据结构--栈和队列

    内容 栈 :栈的抽象数据类型定义、栈的存储表示及基本操作实现、栈的应用 栈的定义(特点) 栈是一种后进先出(LIFO)的线性表,只能在一端进行插入和删除操作,这一端称为栈顶,另一端称为栈底。 打个比方: 有一个胡同很窄只能通过一辆车,而且是死胡同,只能从胡

    2023年04月19日
    浏览(44)
  • 考研数据结构:第八章 排序

    2.1.1算法思想 插入排序的思想很简单,就是不断的把一个个带排序的记录,按的大小插入到前面已经排好序的子序列中。直到全部序列插入完成。 比如我们现在要对下面的序列进行排序, 刚开始我们从1号位开始 我们会认为当前处理的这个元素之前都是有序的 现在把

    2024年02月11日
    浏览(37)
  • 24考研数据结构-——绪论2

    1.4.1 渐近时间复杂度 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(n),它表示随问题规模n的增大而增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的 渐近时间复杂度 ,简称时间复杂度。 大O表示“同阶”,

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包