01_什么是数据结构以及C语言指针回顾
一、数据结构是什么
- 如何把现实中大量而复杂的问题,以特定的数据类型和特定的数据存储结构保存到计算机的存储器中。
- 数据存储包括两方面:个体存储的集合、个体与个体之间的关系的存储
- 程序 = 算法 + 数据结构 --> 针对实际问题选择一个好的数据结构,设计一个好的算法
二、数据结构中各名词解释
数据:表示客观事物的符号,比如98(不同语义下可能是成绩,也可能是体重),数据还包括音乐,图像,视屏等。
数据项:组成数据的基本单位
结点:
三、数据结构的两大分类
线性存储
连续存储
散列存储(链式存储)
非线性存储
四、结构体
什么叫结构体
用户根据自己的需求,自己定义的复合型数据类型。
为什么会出现结构体
为了表示复杂的数据类型,基本数据类型无法满足要求。比如学生。有sid(学号)、name、age...。基本的数据类型无法表达
怎么使用结构体
struct Student{
int sid;//学生的学号
int age;//学生的年龄
char name[];//学生的姓名
};
struct Student st = {,"zhangsan",}
struct Student st;
st.sid = ;
st.age = ;
strcpy(st.name,"zhangsan");
stuct Student *pst;
pst = &st;
pst->sid = ;
pst->age = ;
strcpy(pst->name,"zhangsan");
结构体注意事项:
- 结构体能相互赋值,但不能加减乘除运算
- 普通结构体和结构体指针变量 作为函数传递参数问题
五、动态内存分配
动态的分配 : 可以手工分配内存大小,在不使用的情况下,可以手动释放所占用的内存
静态内存分配:程序运行结束,才会释放所占用的内存、不能动态的增加或减少,直至程序运行结束
动态内存分配:int *pArr = (int*)malloc(sizeof(int) * len);
静态内存分配: int arr[] = {,,,,};
六、指针
在五、动态内存分配中,定义了一个指向整型变量的指针pArr。那么pArr和arr有什么联系呢?
- 内存大小:pArr = 4 => arr[0] = 4; 都是占用4个字节,因为数组名保存的是数组首元素的地址
- 指向:pArr 指向内存块的首地址,相当于arr[0]
- pArr + 1 => arr[1] 表示第二块内存地址
- *(pArr + 1)// = 1 <= a[1] 表示 第二块内存的内容
七、跨函数使用内存
一句话搞定:使用molloc分配空间可以跨函数使用内存
八、Typedef
为已有的数据类型起个别名
typedef int zhangsan; zhangsan i == int i
()
typedef struct Student
{
int sid;
char name[];
char sex;
}ST;
stuct Student st == ST st
()
typedef struct Student
{
int sid;
char name[];
char sex;
}* PST;
struct Student *pst;
PST pst;
()
typedef struct Student
{
int sid;
char name[];
char sex;
}* PST,ST;
ST 代表了 struct Student
PST 代表了 struct Student*
01_什么是数据结构以及C语言指针回顾的更多相关文章
- 飞控入门之C语言指针回顾
指针 何为指针?来个官方定义:指针是一个值为内存地址的变量(或数据对象). 一.指针的声明 //示例 int *pi; //pi是指向int类型变量的指针 char *pc; // pi是指向char ...
- 数据结构算法C语言实现(二十七)--- 7.2图的遍历
一.简述 栈与队列,DFS与BFS.仅以连接表为例实现. 二.头文件 BFS要用到的头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@g ...
- 数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树
一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈 ...
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- 数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现
一.简介 FIFO. 二.头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-9 note:r ...
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...
- 数据结构算法C语言实现(七)--- 3.1栈的线性实现及应用举例
一.简述 栈,LIFO.是操作受限的线性表,和线性表一样有两种存储表示方法.下面以顺序存储为例,实现. 二.ADT 暂无. 三.头文件 //3_1.h /** author:zhaoyu email: ...
- 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加
一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...
- 数据结构算法C语言实现(五)---2.3重新定义线性链表及其基本操作
一.简述 ...由于链表在空间的合理利用上和插入.删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表的长度时不如顺序存储结构的缺点:另一 ...
随机推荐
- Django_自带的admin管理页面
Django的admin管理页面非常的好用,接下来就简单的说一下: 首先当你在pycharm中启动django服务端程序之后,在浏览器中输入地址就可以访问 当你输入默认的admin页面,,会弹出来下边 ...
- VS工程中添加c/c++工程中外部头文件及库的基本步骤
转载自 在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加 ...
- BZOJ 3211: 花神游历各国【线段树区间开方问题】
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3514 Solved: 1306[Submit][Status][Discu ...
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function(切比雪夫多项式+乘法逆元)
题目链接:哈哈哈哈哈哈 _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ 哈哈哈哈哈哈,从9月16日打了这个题之后就一直在补这道题,今天终于a了,哈哈哈哈哈哈. ...
- Windows系统下文件的概念及c语言对其的基本操作(乙)
- Myeclipse xml标签代码提示,引入schema
以SpringMVC为例 先引入命名空间 需要配置 xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schema ...
- JDBC连接数据库(查询)的步骤
先导入jar包 代码: import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;impor ...
- Spark_总结七_troubleshooting
转载标明出处 http://www.cnblogs.com/haozhengfei/p/07ef4bda071b1519f404f26503fcba44.html Spark_总结七_troubles ...
- Oracle_复杂查询综合
Oracle_复杂查询综合 -- 1.列出所有员工的年工资,按年薪从低到高排序. select,) income from emp order by income; -- 2.列出薪金比" ...
- LAMP环境跟LNMP环境有什么不同,主要用什么地方
LAMP即Linux+Apache+Mysql/MariaDB+Perl/PHP/Python Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网 ...