一、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:语句4;break;
}

如果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. 二叉树的子树有左右之分,其子树的次序不能颠倒。

C语言+数据结构总结相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  2. 数据结构c语言版第一章答案,《c语言数据结构》第一章概论自测题答案

    <<c语言数据结构>第一章概论自测题答案>由会员分享,可在线阅读,更多相关<<c语言数据结构>第一章概论自测题答案(4页珍藏版)>请在人人文库网上搜索. ...

  3. 一些可运行的C语言数据结构代码

    网上有很多C语言数据结构代码:有的不能运行:下面是一些能运行的,和运行截图:备用一下: 1 队列 #include<stdio.h> #include<stdlib.h>#de ...

  4. C语言数据结构学习用单元测试

    药物名称: C语言数据结构学习用单元测试 主治: 本品是基于CUnit编写的.全部的.纯C的数据结构(ADT)各种实现的单元测试.主治基础不牢,水品增长缓慢.建议配合严蔚敏<数据结构>(C ...

  5. 顺序表输入栈元素c语言,C语言数据结构之栈简单操作

    C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍 ...

  6. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  7. 厦门理工C语言实验报告8,厦门理工c语言数据结构实验

    <厦门理工c语言数据结构实验>由会员分享,可在线阅读,更多相关<厦门理工c语言数据结构实验(15页珍藏版)>请在人人文库网上搜索. 1.数据结构实验报告 实验序号:6 实验项目 ...

  8. 【c语言数据结构】二叉树

    c语言数据结构完全二叉树 快速开始 直接参考示例代码即可 介绍 概念 二叉树(Binary tree)是树形结构的一个重要类型. 许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单 ...

  9. c语言数据结构插入算法说明,C语言数据结构插入算法

    C语言数据结构插入算法 C语言数据结构插入算法 C语言数据结构 数据结构学习 ->是二目运算符 p->a 引用了指针p指向的结构体的成员a. 整合 void unionL(List *La ...

  10. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf

    Matlab讲义-第四章Matlab语言数据结构1-10.pdf 第四章第四章 Matlab语言基础语言基础 Matlab语言程序简洁.可语言程序简洁.可 读性很强而且调试十分容易.读性很强而且调试十 ...

最新文章

  1. 《C#本质论》读书笔记(18)多线程处理
  2. 让Vue也可以使用Redux
  3. Eclipse快捷键-方便查找
  4. 中国矫形修复植入物市场趋势报告、技术动态创新及市场预测
  5. XSS注入,js脚本注入后台
  6. 分享几个免费的开源邮件服务器软件
  7. rdcman汉化_Remote Desktop Organizer – 管理组织远程桌面 - 小众软件
  8. 2021年危险化学品生产单位安全生产管理人员试题及解析及危险化学品生产单位安全生产管理人员模拟试题
  9. 很好的万年历代码。随时可运行
  10. 输入一个非负整数,正序输出它的每一位数字
  11. 微软75亿美元收购ZeniMax及其旗下工作室;KPS同意21亿美元收购Garrett全部资产 | 美通企业日报...
  12. 开关量、数字量、模拟量、脉冲量的区别
  13. 使用fastboot命令刷机
  14. Windows系统DOS命令之多线程技术
  15. 安卓海豚wii模拟器_海豚wii模拟器安卓版-海豚模拟器模屏官网中文版下载v5.0.11105最新版-模拟MAX...
  16. matlab中poly2sym什么意思,[转载]sym2poly   poly2sym
  17. CSS样式中内联、嵌入、外部样式
  18. Unity抗锯齿设置
  19. Linux 下/etc/passwd文件详解
  20. K均值分类做多光谱图像分割matlab版本

热门文章

  1. Docker使用Dockerfile构建简单镜像
  2. HNUSTOJ-1437 无题
  3. 李洪强经典面试题37
  4. Android Studio导入工程的正确姿势
  5. 关于 java 实现 语音朗读
  6. jquery将表单序列化json对象
  7. OpenscenGraph中控制swapbuffer的方法(用于多机大屏幕同步显示机制)
  8. [Android疑难杂症]Gallery默认和横竖屏切换选中状态问题(2.3、2.3系统存在)
  9. rails online api
  10. EditPlus构建轻量级编译环境