首页 > 其他分享 >408数据结构笔记(Day 1)

408数据结构笔记(Day 1)

时间:2025-01-22 09:00:56浏览次数:3  
标签:循环体 函数 int 地址 数组 数据结构 Day 存储空间 408

学习数据结构基础(c语言): 

一、什么是分支(if/lese、switch),循环(for、while、do while)?

程序的三种结构:顺序,分支,循环

1、顺序 :按照先后顺序执行

比如:int a=2;  ①

double b =3.0; ②

先执行第①步,然后执行第②步。

2、分支:可以使用 if 、 switch 实现分支结构

if语句

if (条件) {
   // 条件为真时执行的代码

else {
   // 条件为假时执行的代码
}

switch语句

switch (表达式) {
   case 值1:
      // 当表达式的值等于值1时执行的代码
      break;
   case 值2:
      // 当表达式的值等于值2时执行的代码
      break;
   ...
   default:
      // 当表达式的值与以上所有值都不相等时执行的代码
      break;
}

 ? 条件运算符 

公式:条件表达式 ? 表达式1 :表达式2

     条件表达式结果是:真或假

     如果条件表达式结果为真,则运算结果为表达式1的结果;

     如果条件表达式结果为假,则运算结果为表达式2的结果;

3、循环:可以使用 for 、 while 、 do while 实现循环结构

while语句

while (条件) {
   // 循环体代码
}

//只要条件为真,就会一直执行循环体中的代码。

do while语句

do {
   // 循环体代码 
} while (条件);   

//先执行一次循环体中的代码,然后再判断条件是否为真,如果为真则继续执行循环体,否则退出循环。

for语句

for (初始化; 条件; 更新) {
   // 循环体代码
}

//初始化一次,然后判断条件是否为真,如果为真则执行循环体,并在每次执行完循环体后更新变量的值,再判断条件是否为真,直到条件为假才退出循环。

二、什么是数组?

1、数组的定义

数组:一些具有相同类型的数据的集合

2、一维数组的形式

形式:类型名 数组名 【数组长度】

类型名:指定数组中每个元素(数据)的类型(int、double、float.......)

数组名:数组变量的名称,一个合法的标识符

数组长度:设定数组大小,即这个数组能够容纳的元素的个数

3、一维数组的初始化

第一种:数组长度和初始化的元素的个数相同。int a[3]={1,2,3};

第二种:数组长度比初始化元素的个数要小。后面的自动初始化为0。int a[4]={1,2} 第3,4个为0

第三种:系统自动给予数组长度:int a[]={1,2,3,4,5} 数组长度自动定义为5

第四种:报错,初始化数据的个数大于数组长度,会自动报错例如:int [2]={1,2,3,4}

三、什么是函数?

1、函数的定义

C语言中的函数是一段代码的封装,它可以执行特定的任务并返回一个值。函数在程序中能够重复使用,可以提高代码的可读性和重用性。

2、函数的组成

函数由函数头和函数体组成,具体由下面4部分组成

例如 int add(int a,int b){

}

(1)返回类型:指明函数执行完毕后返回的数据类型。可用的返回类型包括整型、浮点型、字符型、指针等。例如上面的第一个int。并且函数体中有return语句,但是函数也是有可能没有返回值的,这个时候返回类型为void。

(2)函数名:用于在程序中调用函数的标识符。

(3)参数列表:函数可能接受零个或多个参数,参数用于传递数据给函数,供函数使用。参数列表中可以指定参数的类型和名称。

(4)函数体:实际执行函数任务的代码块,由一对花括号{}包围。

3、函数的分类

(1)库函数:C语言中的库函数是已经编写好的可供开发者使用的函数,它们提供了一系列常用和功能强大的操作,涵盖了各种任务和领域,如字符串处理、数学计算、文件操作、内存管理等。

具体有:

字符串处理函数:包括strlen、strcpy、strcat、strcmp等函数,用于对字符串进行常见的操作,如求字符串长度、拷贝字符串、连接字符串、比较字符串等。

数学函数:包括abs、sqrt、pow、sin、cos等函数,用于进行数学计算,如取绝对值、计算平方根、求幂运算、三角函数等。

文件操作函数:包括fopen、fclose、fread、fwrite等函数,用于打开、关闭、读取和写入文件,进行文件相关的操作。

内存管理函数:包括malloc、calloc、realloc、free等函数,用于动态分配和释放内存,进行内存的管理和操作。

时间和日期函数:包括time、localtime、strftime等函,用于获取和处理时间数和日期,进行时间和日期相关的操作。

库函数的使用:要使用库函数,需要包含相应的头文件,并将函数调用放在自己的代码中。

(2)自定义函数,用自己写的函数以达到某一要求,如add等等。

在C语言中,可以使用自定义函数来组织和重用代码。自定义函数能够接收输入参数并返回一个值(如果需要),并可以在程序中的任何地方被调用。

四、什么是指针、什么是地址?

1、什么是地址

在计算机运行时,数据会存放在内存中,内存会以字节为单位划分为多个存储空间,并且为每个字节默认设置一个对应的编号,这个编号就是地址。

地址只是计算机规定的一个值,所以不会占用内存的存储空间,地址显示的长度会根据系统及编译器的位数确定。64位编译器显示的地址为16个16进制数,32位编译器显示的地址为8个16进制数。

在计算机运行时,内存会动态分配存放数据的位置,所以同样的数据在每次运算时存放的地址可能会产生变化。

2、获取地址值

只有通过获取数据的地址才能对内存中的数据进行操作。在C语言中,使用取地址符&获取内存中数据的地址。最典型的取地址的应用就是使用库函数scanf()。

例如

scanf_s("%d",&a)

printf("%p",&a)

%p占位符指定输出的数据为地址,不可以用%x占位符代替。

3、什么是指针

指针可以说是C语言的灵魂,指针指代数据存放在内存中的地址。每个地址代表一个数据。

(1)声明指针

格式:基类型 *变量名  例如int *p;

这里的基类型,和我们之前学习的数据类型int有所不同。

int a 和int *p中int的不同

数据类型:用于声明存放数据的变量   代表数据的类型是int

基类型:用于声明指针变量  代表的是数据存放的地址所指向的数据是int型

(2)指针变量赋值

三种方式:

第一种:变量名赋值  

例如:

int a = 9;
int *p;
p = &a;

第二种:指针变量赋值

例如:

int i = 8;
int *p = &i;
int *q;
q = p;
 

第三种:赋空值

#include<stdio.h>
int *p;
p = NULL;


(3)动态分配存储空间

在C语言中,函数malloc()和calloc()用于动态分配存储空间。使用这两个函数时,都要引用头文件#include<stdlib.h>或#include<malloc.h>。

a:malloc()函数:函数malloc()只有一个参数。该函数可以动态申请一个连续的存储空间,并返回该存储空间的首地址。

格式: 

(基类型*)malloc(size);  size为存储单元的大小

(基类型*)malloc(sizeof(数据类型)*number);      第二个星号为乘法运算符 ,number为申请存储单元的个数
 

例如: int *p=(int*)malloc(4)

int *p=(int*)malloc(sizeof(int)*4)

b:calloc()函数:函数calloc()有两个参数:第一个参数规定申请几个单位存储空间;第二个参数规定申请单位存储空间大小。

格式:

(基类型*)calloc(number,sizeof(数据类型));、
例如:

int *p=(int*)calloc(1,sizeof(int));

c:free()函数:当对应的数据使用完后,就要使用函数free()回收动态申请的存储空间,把之前动态申请的存储空间返还给系统。函数free()要与函数malloc或calloc()配对使用。

格式:

free(指针变量名)
例如:

int *p;

free(p);

五、什么是struct结构体?

1、什么是结构体

struct 结构体是 C 语言中的一种用户自定义的数据类型,可以用于组合多个不同类型的变量为一个实体,并以此为基础定义新的数据类型。关键字为struct。和其他的类型基础数据类型一样,例如int型,char型,区别是结构体可以做出你想要的数据类型。

2、定义结构体

格式:

struct 结构体名称 {
    类型 成员1;
    类型 成员2;
    // 更多成员定义
};

例如:

struct student{

int id;

char name[20];

float score;

};

3、结构体的空间分配

在C语言中,结构体(struct)占用的内存空间取决于其内部包含的成员变量的大小和对齐方式。对于一个结构体来说,其内存大小将是其各个成员变量所占内存大小的总和,再加上由于对齐所增加的填充字节。

标签:循环体,函数,int,地址,数组,数据结构,Day,存储空间,408
From: https://blog.csdn.net/m0_64601600/article/details/145269041

相关文章

  • Day18-【软考】超长文!一文看懂数据库系统所有问题!ER模型、关系代数、规范化理论都是什
    文章目录数据库系统总览一、数据库模式什么是两级映射,三级模式?二、数据库设计-ER模型数据设计流程是怎样的?ER模型是怎样的?多对多是如何来的?什么是冲突问题?ER模型如何转为关系模式?三、关系代数(必考!)关系代数基本运算包括哪几种?它们分别是什么?并,交,差,是典型的集合运算笛卡......
  • java基础Day5 java流程控制(1)
    一、用户交互ScannerScanner对象Demo01Demo02Demo03使用next()方式接收packagescanner;importjava.util.Scanner;publicclassDemo01{publicstaticvoidmain(String[]args){//创建一个扫描器对象,用于接收键盘数据Scannersc=new......
  • obsidian-things3-today插件
    obsidian-things3-today插件插件:ObsidianPlugin-Things3Today把之前的插件重新搞了搞,把乱七八糟的东西去掉了,然后提交了obsidian插件库review审核通过:https://github.com/obsidianmd/obsidian-releases/pull/2997新录了一个gif:见github的readme,图中可以看到和things3......
  • 数据结构 单链表详解
    单链表的基本概念及特点定义:单链表是由一系列节点组成的线性序列,每个节点包含两个部分,一个是存储数据元素的数据域,另一个是指向下一个节点的指针域。最后一个节点的指针域为空(通常用NULL表示),表示链表的结束。特点:1、动态性:单链表的存储空间是在程序运行过程中动态分配......
  • 数据结构之链表(linked list)代码实现(小白轻松懂,C语言版)
    一、前言:链表的简单介绍链表(LinkedList)是一种重要的线性数据结构,它以节点(Node)的形式存储数据,每个节点通过指针(或引用)指向下一个节点,从而形成一个动态的数据链条。与数组不同,链表的内存分配并不连续,因此具有更灵活的插入和删除操作,但在随机访问元素时效率相对较低。链表通......
  • 数据结构-单向不带头不循环链表
    链表知识总结逻辑结构:线性结构(元素之间存在一对一关系)存储结构(物理结构):链式存储(存储顺序和逻辑顺序不在乎是否一致)1.链表的特点:擅长进行动态删除和增加操作,不擅长随机访问(需要遍历,因为链表不按顺序存放)2.链表分类:单双向链表单链表:元素节点有两部分组成(数据域-存储当前......
  • 数据结构-栈
    1、栈的基本概念1、栈是特殊的线性表:只允许在一端进行插入和删除操作2、栈的逻辑结构就是线性结构,栈的存储结构既可以是顺序存储,也可以是链式存储3、栈顶:允许进行插入和删除的一端(最上面的为栈顶元素)4、栈底:不允许进行插入和删除的一端(最下边的栈底元素)5、空栈:不含任何......
  • 数据结构-二叉树
     树的相关概念:1、节点的度:树中一个节点的孩子个数称为该节点的度,所有节点的度的最大值是树的度2、分支节点:度大于0的节点称为分支节点3、叶子结点:度为0的节点称为叶子结点4、节点的层次(深度):从上往下数,根节点为1层,依次往下加15、树的高度(深度):树中节点的最大层次6、树......
  • Day 8 循环结构
    1.while循环结构while(布尔表达式){   //循环内容}大多数情况下循环需要停止,我们需要一个让表达式失效的方式来结束循环。循环条件一直为true会造成无限循环“死循环”,正常的业务编程应尽量避免死循环,死循环会影响程序性能或者造成程序卡死崩溃。少部分情况需要循......
  • 《StringBuilder类的数据结构和扩容方式解读》
    StringBuilder类的简单用法、数据结构和扩容方式解读文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言在之前的文章中和大家讲过String字符串类具有不可变性,今天给大家介绍一个可变字符串类——StringBuilder类。提示:以下是本篇文章正文内......