基础四大件 -- “数据结构与算法” 学习笔记

本人在自学数据结构与算法时的所学所想,所有错误请多包涵并指出改正。所用资源:B站BV11s41167h6【郝斌】

概述

数据结构定义:我们如何把现实生活中大量而复杂的问题以特定的数据类型和特定的存储结构保存在主存储器(内存)中,以及在此基础上为实现某个功能而执行的相关操作,这个操作也叫做算法。

数据结构 = 个体 + 个体之间的关系
算法 = 对存储数据进行的操作

1、模块一:线性结构【将所有节点用一根绳串起来】

连续存储【数组】

# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>

void init_arr(struct Arr *, int); // 将数组进行初始化
bool append_arr(struct Arr *, int); // 追加(末尾)
bool insert_arr(struct Arr *, int, int); // 插入(任意位置)
bool delete_arr(struct Arr *, int); //删除元素
int get(struct Arr *, int); // 获取指定位置数组元素
bool is_empty(struct Arr *); // 判断是否为空
bool is_full(struct Arr *); // 判断是否为满
void sort_arr_asc(struct Arr *); // 将数组进行升序排序
void sort_arr_desc(struct Arr *); // 将数组进行降序排序
void show_arr(struct Arr *); // 将数组元素进行显示
void invert_arr(struct Arr *); // 将数组元素进行倒置

/*-----------------------
    封装数组信息
-----------------------*/
struct Arr
{
   
    int * pBase; // 首元素地址
    int length;  // 数组所能容纳最大元素个数
    int count;   // 当前数组有效元素个数
};

/*----------------------------
    功能:初始化数组信息
    参数:
        arr:所需初始化数组地址
        len:所需数组长度
----------------------------*/
void init_arr(struct Arr * arr, int len)
{
   
    arr->pBase = (int *) malloc( sizeof(int) * len ); // 动态分配内存,创建数组空间
    arr->length = len;
    arr->count = 0;

    printf("请输入当前要插入数据个数:");
    int dataLen;
    scanf("%d", &dataLen);

    if(dataLen != 0)
    {
   
        printf("请输入所插入数据:");
        for(int i = 0; i < dataLen; i++)
        {
   
            scanf("%d", &(arr->pBase[i]) );
            arr->count ++;
        }
        printf("数据初始化完毕。\n");
        return;
    }
    else
    {
   
        printf("数据初始化完毕。\n");
        return;
    }
    
    
}

/*--------------------------------
    功能:判断数组是否为空
    返回值:
        ture:当前数组为空
        false:当前数组包含有效数据
---------------------------------*/
bool is_empty(struct Arr * arr)
{
   
    return arr->count == 0 ? true : false;
}

/*--------------------------------
    功能:判断数组是否已满
    返回值:
        ture:当前数组已满
        false:当前数组未填充满
---------------------------------*/
bool is_full(struct Arr * arr)
{
   
    return arr->count == arr->length ? true : false;
}

/*-------------------------------------------
    功能:当数组未满时,在数组末尾追加一个新数据
    参数:
        arr:所需操作数组地址
        val:所需追加数据
    返回值:
        ture:追加成功
        false:追加失败
-------------------------------------------*/
bool append_arr(struct Arr * arr, int val)
{
   
    if( is_full(arr) )
    {
   
        printf("当前数组已经填满,无法继续添加。\n");
        return false;
    }
    else
    {
   
        arr->pBase[arr->count] = val;
        arr->count ++;
        return true;
    }
}

/*---------------------------------------------------
    功能:当数组未满时,在数组指定位置插入一个数据
    参数:
        arr:所需操作数组地址
        position:指定数据插入位置,1 代表 a[0] 位置元素
        val:所需追加数据
    返回值:
        ture:添加成功
        false:添加失败
----------------------------------------------------*/
bool insert_arr(struct Arr * arr, int position, int val)
{
   
    if( is_empty(arr) )
    {
   
        arr->pBase[position -1] = val;
        arr->count ++;
        return true;
    }
    else if( is_full(arr) )
    {
   
        printf("当前数组已经填满,无法继续添加。\n");
        return false;
    }
    else if(arr->length < position)
    {
   
        printf("当前数组总长度为%d,输入数据非法。\n", arr->length);
        return false;
    }
    else if(position < 1)
    {
   
        printf("输入数据非法,请输入大于 0 的数。\n");
        return false;
    }
    else  // 当数组含有有效数据时,先将数组移动,后进行插入操作
    {
   
        for(int i = arr->count; i >= position; i--)
        {
   
            arr->pBase[i] = arr->pBase[i-1];
        }
        arr->pBase[position - 1] = val;
        arr->count ++;
        return true;
    }
}

/*-------------------------------------------
    功能:对当前数组所含有有效数据进行显示
    参数:
        arr:所需操作数组地址
-------------------------------------------*/
void show_arr(struct Arr * arr)
{
   
    if( is_empty(arr) )
    {
   
        printf("当前数组不包含有效数据,请为其赋值后再进行操作。\n");
        return;
    }
    else
    {
   
        for(int i = 0; i < arr->count; i++)
        {
   
            printf("%d\t", arr->pBase
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算机科班生通常需要学习以下四个核心领域,也被称为"四大": 1. 计算机组成原理(Computer Architecture):学习计算机的基本组成和工作原理,包括中央处理器(CPU)、存储器、输入输出设备等。了解计算机内部的运行机制,包括指令执行、存储器层次结构、总线和I/O管理等。 2. 操作系统(Operating System):学习操作系统的概念、功能和原理。掌握操作系统的管理和调度进程、内存管理、文系统、设备管理等基本知识。了解操作系统如何提供对硬资源的抽象和管理,以及如何协调多个应用程序的执行。 3. 数据结构与算法(Data Structures and Algorithms):学习各种基本的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、查找、图算法等)。掌握数据结构算法的设计思想和实现方法,培养解决问题的能力和编程技巧。 4. 数据库系统(Database Systems):学习数据库的基本概念、结构和操作。了解关系型数据库和非关系型数据库的特点和应用场景。掌握SQL语言的基本使用和数据库设计、优化的基本原则,以及数据库管理系统的原理和技术。 除了这些核心领域,计算机科班生还会学习其他重要的课程,如编程语言、网络通信、软工程、人工智能等,根据个人兴趣和专业方向的不同,还可以选择深入研究相关的领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值