一、数据结构是什么

  1. 如何把现实中大量而复杂的问题,以特定的数据类型和特定的数据存储结构保存到计算机的存储器中。
  2. 数据存储包括两方面:个体存储的集合、个体与个体之间的关系的存储
  3. 程序 = 算法 + 数据结构  -->  针对实际问题选择一个好的数据结构,设计一个好的算法

二、数据结构中各名词解释

数据:表示客观事物的符号,比如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");

结构体注意事项:

  1. 结构体能相互赋值,但不能加减乘除运算
  2. 普通结构体和结构体指针变量 作为函数传递参数问题

五、动态内存分配

动态的分配 : 可以手工分配内存大小,在不使用的情况下,可以手动释放所占用的内存

静态内存分配:程序运行结束,才会释放所占用的内存、不能动态的增加或减少,直至程序运行结束

 动态内存分配:int *pArr = (int*)malloc(sizeof(int) * len);
静态内存分配: int arr[] = {,,,,};

六、指针

在五、动态内存分配中,定义了一个指向整型变量的指针pArr。那么pArr和arr有什么联系呢?

  1. 内存大小:pArr = 4 => arr[0] = 4; 都是占用4个字节,因为数组名保存的是数组首元素的地址
  2. 指向:pArr 指向内存块的首地址,相当于arr[0]
  3. pArr + 1 => arr[1] 表示第二块内存地址
  4. *(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语言指针回顾的更多相关文章

  1. 飞控入门之C语言指针回顾

    指针 何为指针?来个官方定义:指针是一个值为内存地址的变量(或数据对象). 一.指针的声明 //示例 int *pi; //pi是指向int类型变量的指针 char *pc; // pi是指向char ...

  2. 数据结构算法C语言实现(二十七)--- 7.2图的遍历

    一.简述 栈与队列,DFS与BFS.仅以连接表为例实现. 二.头文件 BFS要用到的头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@g ...

  3. 数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树

    一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈 ...

  4. 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现

    一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...

  5. 数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现

    一.简介 FIFO. 二.头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-9 note:r ...

  6. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  7. 数据结构算法C语言实现(七)--- 3.1栈的线性实现及应用举例

    一.简述 栈,LIFO.是操作受限的线性表,和线性表一样有两种存储表示方法.下面以顺序存储为例,实现. 二.ADT 暂无. 三.头文件 //3_1.h /** author:zhaoyu email: ...

  8. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  9. 数据结构算法C语言实现(五)---2.3重新定义线性链表及其基本操作

    一.简述 ...由于链表在空间的合理利用上和插入.删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表的长度时不如顺序存储结构的缺点:另一 ...

随机推荐

  1. ------- 当前全球最新的 IPv4 地址池使用报告 -------

    -------------------------------------------------------------- 对于互联网行业相关的从业人员而言,时刻关注 IPv4 地址池的状态此类&q ...

  2. Java与算法之(4) - 数字全排列

    全排列是指n个数(或其他字符)所有可能的排列顺序,例如1 2 3三个数字的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 那么问题来了,任意输入一个大于1的数字n,列 ...

  3. CommonJS,AMD,RequireJS的区别

    RequireJS实现了AMD的API. CommonJS是使用exports对象来定义模块的一种方法,它定义了模块的内容.简单地实现一个CommonJS的定义就像下面这样: // someModul ...

  4. bzoj:2331: [SCOI2011]地板

    Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...

  5. Vijos P1116 一元三次方程求解【多解,暴力,二分】

    一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...

  6. Matrix Chain Multiplication(表达式求值用栈操作)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...

  7. Spring框架学习笔记(10)——Spring中的事务管理

    什么是事务 举例:A给B转500,两个动作,A的账户少500,B的账户多500 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 一.注解添加事务管理方 ...

  8. UnityShader 表面着色器简单例程集合

    0.前言 这些简单的shader程序都是写于2015年的暑假.当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目.这些文章闲置在我个人博客中,一年将过,师弟也到了 ...

  9. 将数据按照gzip当时解压的工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; impo ...

  10. C++ 默认参数(转载)

    函数的默认参数值,即在定义参数的时候同时给它一个初始值.在调用函数的时候,我们可以省略含有默认值的参数.也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值. void Func( ...