C语言+数据结构总结

一、C语言部分

1、数据类型:

Int      	整形               4字节Short	   短整形              2字节Long	   长整形              4字节Float 	  单精度浮点型         4字节Double     双精度浮点型        8字节Char         字符型            1字节

2、变量

  1. 全局变量:作用于全局的变量。即生命周期为程序的开始到程序的结束。
  2. 局部变量:作用于中指定区域的变量。main()函数中的局部变量生命周期等同于全局变量
  3. 当全局变量与局部变量的变量名相同时,局部变量优先使用

3、常用关键字

  1. static:用static修饰的变量不会因函数的结束而被释放。
  2. break:结束整个循环,当循环多层嵌套时,运用break只能结束一层循环;跳出switch语句,如果不用break,在运行完当前case语句后继续运行下一条case语句。
  3. continue:结束本次循环,即本次循环中continue后的语句不执行。
  4. sizeof:计算数据结构或类型所占空间大小。

4、if…else语句:

if(表达式)
{语句a;
}
else
{语句b;
}

如果表达式结果为真,则执行语句a,反之执行语句b。

5、switch…case语句:

switch(i)
{case a:语句1;break;
case b:语句2;break;
case c:语句3;break;
defluat:语句4break;
}

如果i等于a,则执行语句1,等于b时,执行语句2,如果没有与i对应的case语句,就执行default语句。

6、while循环:

While(表达式)
{循环体;
}

While循环先判断表达式的结果真假,为真就执行循环体,直到条件表达式的结果为假时跳出循环。

7、do…while循环:

do
{循环体;
}while(表达式)

无条件先执行循环体,在进行表达式结果真假性判断。

8、for循环

for(表达式1;表达式2;表达式3)
{循环体;
}

先执行表达式1,只执行一次,再进行表达式2真假性判断,为真时执行循环体,接着执行表达式3,在对表达式2进行判断,当表达式2为假时跳出for循环。

9、goto语句:

//跳转标记:
//语句段;
//goto 
//跳转标记;int c=0;
scanf("%d",&c);
aa:a=0;b=0;if(c>10)goto aa;

当执行到goto语句时,跳转到跳转标记处,开始执行跳转标记后的语句段。执行goto语句时无条件跳转,可跳出多层循环,这是break所不具备的。goto语句也可构成一个循环。

10、函数的参数

(1)实际参数(实参):

真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在 进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

(2)形式参数(形参):

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单 元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。

11、函数递归

(1)概念:
程序调用自身的编程技巧称为递归。

(2)递归的两个必要条件 :
存在限制条;每次递归调用之后越来越接近这个限制条件

12、数组

(1)一维数组

int arr[10];

数组是一组相同类型元素的集合。arr[10]数组从arr[0]开始到arr[9]共10个元素,没有arr[10]这个元素。数组是数组,不是指针,只是数组名具有指针的特性。

关于一维数组名的运用:

arr               arr数组
arr+0             arr数组首元素
*arr              arr数组首元素值
&arr              arr数组的地址
&arr+1            下一个数组的地址(越界)
&arr[0]           arr[0]的地址
&arr[0]+1         arr[1]的地址

(2)二维数组

int arr[3][4];

二维数组不要理解成3列4行的矩阵的样式,应该理解为有3组元素个数为4的一维数组的集合,例:

arr[3][4]={{0,1,2,3};{4,5,6,7};{8,9,10,11}
};

关于二维数组名的运用:

arr[0][0]               arr数组首元素的值
arr[0]               arr数组中第一个一维数组
arr[0]+1             arr数组中第二个一维数组
*(arr[0]+1)        arr数组中第一个一维数组第二个元素的值
&arr[0]+1             arr数组中第二个一维数组的地址

(3)数组作为参数传参时传的是数组首元素的地址。

13、指针

指针是一个变量,存放着某一指定的变量单元的地址。例:

int a=10;
int *p=&a;

定义一个整形变量a,并初始化为10,在定义一个指向整形变量a的指针变量p,用于存放a的地址。因为存放着a的地址,故而可以通过指针p来访问a,对其解引用操作: printf(“%d”,*p);输出结果为10,。也可通过指针p来修改a的值,如:*p=12;printf(“%d”,a);输出结果为12。

指针的大小在32位平台的大小为4个字节,与其指向的数据类型无关。

指针的运算一般与数组相结合,指针加1表示指针向后移动其指向数据类型大小个字节。p+1就表示指针p向后移动4个字节。

14、结构体

Struct A
{int a;int b[10];char  *arr;
};

结构体是一些变量的集合,可以是单个的变量,数组,指针,也可以是结构体,结构体传参一般传结构体的地址,效率是最高的。

(1)结构体内存对齐:

**

原因:

不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址 处取某些特定类型的数据,否则抛出硬件异常。

数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
原因在于,为了访问未对齐的内存,处理 器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

规则:

第一个成员在与结构体变量偏移量为0的地址处。

其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8

结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。

如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是
所有最大对齐数(含嵌套结构体的对齐数)的整数倍

(2)结构体数组

Struct A a[10];

定义一个结构体数组a[10],该数组每个元素都代表一个结构体变量,共10个元素。

15、枚举

enum Day
{    Mon,Tues,Wed,    Thur,   Fri,   Sat,   Sun 
}

定义一个枚举类型Day,其内容为所有取值可能,也叫枚举常量,如果没有对枚举常量赋值,则第一个枚举常量的值默认为0,后面依次加1。

16、动态内存你分配

(1)void malloc (size_t size);*

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。

(2) void calloc (size_t num, size_t size);*

该函数的功能是为 num 个大小为 size
的元素开辟一块空间,并且把空间的每个字节初始化为0。 与函数
malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0

(3)void realloc (void ptr, size_t size);**

ptr 是要调整的内存地址 size 调整之后新大小 返回值为调整之后的内存起始位置。
这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到 新 的空间。

(4)void free (void ptr);*

free函数用来释放动态开辟的内存。 如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。 如果参数 ptr 是NULL指针,则函数什么事都不做。

17、文件

(1)文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态
及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.

(2)打开、关闭一个文件

//打开文件
FILE* fopen ( const char * filename, const char * mode ); 
//关闭文件
int fclose ( FILE * stream );

(3)文件打开方式

 “r”         只读
“w”          只写
“a”          向文本文件尾添加数据 
“rb”         二进制形式读文件(只)
“wb”         二进制形式写文件 
“ab”         向一个二进制文件尾添加数据
“r+”         为了读和写,打开一个文本文件
“w+”         为了读和写,建议一个新的文件
“a+”         在文件尾进行读写 
“rb+”        为了读和写打开一个二进制文件
“wb+”        新建一个新的二进制文件读和写
“ab+”        打开一个二进制文件,在文件尾进行读和写

(4)sprintf(buf,”%d”,a);

把变量a以十进制的形式打印给字符型数组buf。

Sscanf(buf,“%c”,&a);

从字符型数组中获取一个字符并赋给a。

fprintf(fp,%d”,a);

fp是指向一个文件的文件指针,该函数是将a以十进制形式写入fp指向的文件中。

fscanf(fp,%d”,&a);

fp是一个指向文件的指针,该函数是从fp指向的文件中以十进制形式读取数据并赋给a。

二、数据结构

1、单链表

概念:
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链
接次序实现的。

Typedef struct List
{Int data;struct List *next;
}ListNode;

插入一个节点:

ListNode *tem=(ListNode*)malloc(sizeof(ListNode));
tem->data=data;
tem->next=head->next;
head->next=tem;

删除一个节点:

ListNode *tem=head;
for(;tem->next!=NULL;tem=tem->next)
{if(tem->data==data){tem->next=tem->next->next;break;
}
}

删除链表头:

ListNode *tem=*head)->next;
Free(*head);
*head=tem;

2、栈

概念:
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端
称为栈顶,另一端称为栈底。遵循先入后出的规则。

3、队列

概念:
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出入队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头。

4、二叉树

概念 :
一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树
的二叉树组成。

二叉树的特点:

  1. 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
  2. 二叉树的子树有左右之分,其子树的次序不能颠倒。

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

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

相关文章

对内存重叠的深入认识

内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷…

Android特效 五种Toast具体解释

Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,并且Toast显示的时间有限,过一定的时间就会自己主动消失。 1.默认效果: 代码:Toast.makeText(getApplicationContext(), "默认Toast样式&…

为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

△一个对Coding有着独特追求的人△作者 l Hollis来源 l Hollis(ID:hollischuang)BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型…

日期getUTCMonth()方法以及JavaScript中的示例

JavaScript Date getUTCMonth()方法 (JavaScript Date getUTCMonth() method) getUTCMonth() method is a Dates class method and it is used to get the current month’s value according to the UTC (Universal time coordinated) between the range of 0 to 11, where 0 f…

VB另类技巧(可以用于VBA)-指针的使用

大家都知道C中可以使用指针,但现在VB(当然也有VBA)也可以使用指针了,这是我在网上看的一篇文章,大家参考一下。想当年东方不败,黑木崖密室一战,仅凭一根绣花针独战四大高手,神出鬼没…

动图演示:手撸堆栈的两种实现方法!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)正式开始之前,先和各位朋友聊聊公众号后期的一些打算,后面的文章计划写一些关于数据结构和算法的内容…

Java中的异常处理

1 class YiChang{2 public static void main(String[] args){3 A anew A();4 a.show();5 }6 }7 8 class A{9 int[] i{1,2,3}; 10 public void show(){ 11 System.out.println(i[3]); 12 } 13 } 运行上面代码,会抛出这样…

数组copyWithin()方法以及JavaScript中的示例

JavaScript copyWithin()方法 (JavaScript copyWithin() method) copyWithin() method is used to copy the specified elements from an array and replace from specified index within the same array. It changes the this array (actual array). copyWithin()方法用于从数…

多图带你彻底理解Java中的21种锁!

作者 | 悟空聊架构来源 | 悟空聊架构(ID:PassJava666)本篇主要内容如下:本篇主要内容本篇文章已收纳到我的Java在线文档、 Github我的SpringCloud实战项目持续更新中帮你总结好的锁:序号锁名称应用1乐观锁CAS2悲观锁sy…

杨辉三角——数组解决

杨辉三角如图下所示,每一行的第一个数和最后一个数都为1,每一行中间的数(出去第一个和最后一个)a等于上一行与其相同列数的数b与数b前面的数之和。例: 第3行第2列的数是3,它就等于第2行第2列的数&#xff…

作文议论文开头结尾

一、 开头篇 1. Nowadays, it is commonly/widely/generally believed that…., but I wonder… 如今,人们普遍认为……,但是我怀疑…… 2. With the rapid growth of… … have/has become increasingly important in our daily life. 随着……的快速…

VS生成的exe文件如何在其他电脑上运行

在VS编译器上编写的程序都会生成一个exe文件,有时候写了一个很装逼的程序想在别人电脑炫耀一下,奈何将这个exe文件拷贝过去并不能运行,直接宣告装逼失败。为此将介绍一下如何将生成的exe文件在其他电脑上运行,步骤如下&#xff1a…

dumpstack_Java Thread类的静态void dumpStack()方法(带示例)

dumpstack线程类静态void dumpStack() (Thread Class static void dumpStack()) This method is available in package java.lang.Thread.dumpStack(). 软件包java.lang.Thread.dumpStack()中提供了此方法。 This method is used to print or display stack tracing of the cur…

netty websocket 简单消息推送demo

2019独角兽企业重金招聘Python工程师标准>>> 今天心情很不好!!! 原因保密。 这篇是基于"netty与websocket通信demo"。 错误想法:大量客户请求,共用一个worker,来实现推送。 正确作法&…

给 JDK 官方提了一个 Bug,结果...

图 by:石头北京-望京关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。背景分享一下之前踩的一个坑,背景是这样的:我们的项目依赖于一个外部服务&#x…

Of Study - Francis Bacon

Of StudyFrancis Bacon 弗朗西斯培根Studies serve for delight, for ornament, and for ability. Their chief use for delight, is in privateness and retiring; for ornament, is in discourse;and for ability, is in the judgment and disposition of business.For expe…

解决exe文件在别人电脑上运行缺失文件情况

这里就以vs2013为例:编译后生成的exe文件拷贝到别人电脑上运行是会弹出一个窗口说缺失MSVCR120.dll和MSVCR120D.dll这两个文件。(其他vs版本的编译器在所提示的缺失文件按下述方法也可解决)下面就介绍一种方法解决。 1、在VS2013软件中找到MS…

Java日历的getMinimalDaysInFirstWeek()方法和示例

Calendar类的getMinimalDaysInFirstWeek()方法 (Calendar Class getMinimalDaysInFirstWeek() method) getMinimalDaysInFirstWeek() method is available in java.util package. getMinimalDaysInFirstWeek()方法在java.util包中可用。 getMinimalDaysInFirstWeek() method is…

HighCharts: 设置时间图x轴的宽度

这个x轴宽度的设置整了好久,被老板催的要死highcharts的api文档很难找,找了半天也没找到,网上资料少,说的试了下,也没有,我用的图里api文档里没有介绍,这个属性不知道的话,根本不好找…

32张图带你彻底搞懂事务和锁!

作者 | 悟空聊架构来源 | 悟空聊架构(ID:PassJava666)转载请联系授权(微信ID:PassJava)本篇主要内容如下:本篇主要内容一、事务1.1 什么是事务为单个工作单元而执行的一系列操作。如查询、修改数…