数据结构入门准备

数据结构与算法入门需要准备些什么呢?

以c为例
首先知道一些概念如线性表,栈,队列,串,数组,广义表,树,二叉树,图
重点是线性表,二叉树,现在你只需要知道就行,至于什么意思,以后再说

接下来就要做一些准备了,了解以下知识,我做了一下简单的介绍

  • 变量类型
  • 控制语句
  • 函数
  • 逻辑结构与存储结构

变量类型

1.基本类型:int float char(会语言的都会吧)
2.指针类型:和基本类型不一样的是指针存储的是地址

oxo1 A(int)
oxo2 B(char)
oxo3 C(float)

定义一个p1:int *p1=&A
p1指向D: p1=&D
将P1所指的值赋值给E: E=*p
(这里的两个**号不同注意加以区分)

指针还有一个特殊的标记:null
null是不指向任何地址的特殊标志,初始化指针的时候常用 为什么要用null呢?
举个例子,假如有一个指针p指向某一存储空间,在某一时刻这块区间被系统释放了,虽然存储内容没了,但是p依然存在,过了一会这片区域分配给了其他的变量,值也变了,这时有人把p1拿过来,以为还是原来空间的内容,就会出错,所以这个时候就用到了null
3.构造类型
相同类型的用数组(数组也不做解释)
不同类型用结构体:下面是两种定义格式和举例

typedef struck
{
	int a;
	float b;
	char c;
	... ...
}结构体名
//结构体类型包含指向自己相同类型指针的定义方法
typedef struck 结构体名
{
	int a;
	float b;
	char c;
	struck 结构体名 *d;//可以看作定义了以结构体类型的指针
	... ...
}结构体名
//举例
typedef struck
{
	int a;
	float b;
	char c;
	... ...
}S

S s;
s.a=1;
s.b=1.0;
s.c='q';

4.void
主要用来定义没有返回类型的函数

控制语句

控制语句:判断和循环(大家应该都会)

函数

提一下:

int result=0;
void getResult(int &r)//直接引用result
{
	++r;
}
getResult(result)
int result=0;
void getResult(int r)//引用的是result的值
{
	++r;
}
getResult(result)
int *p=null;
void getResult(int *&p)//指针型变量的引用型定义
	...
	p=q;
	...
}
getResult(p)

逻辑结构和存储结构

逻辑结构

是指在数据中数据元素之间的相互关系。数据元素之间存在不同的逻辑关系构成了以下4种结构类型。

(1)集合结构:集合的数据元素没有其他关系,仅仅是因为他们挤在一个被称作“集合”的盒子里。(无关系
(2)线性结构:线性的数据元素结构关系是一对一的,并且是一种先后的次序,就像a-b-c-d-e-f-g·····被一根线穿连起来。(一对一
(3)树形结构:树形的数据元素结构关系是一对多的,这就像公司的部门级别,董事长-CEO\CTO-技术部\人事部\市场部…。(一对多

(4)图结构:图的数据元素结构关系是多对多的。就是我们常见的各大城市的铁路图,一个城市有很多线路连接不同城市。(多对多)

存储结构

(也称为物理结构(physical structure),指的是数据的逻辑结构在计算机中的存储形式。数据的存储结构一般可以反映数据元素之间的逻辑关系。分为顺序存储结构和链式存储结构。

(1)顺序存储结构:是把数据元素存放在一组存储地址连续的存储单元里,其数据元素间的逻辑关系和物理关系是一致的。可以瞬间推算出某一存储单元的地址(适合存线性结构支持随机存储)

(2)链式存储结果:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的,数据元素的存储关系并不能反映其逻辑关系,因此需要借助指针来表示数据元素之间的逻辑关系。包含一个数据域和一个指针域(不仅存储数据还存储下一单元的地址(指针变量))
数据结构入门准备_第1张图片

typedef struck LNode
{
	int data;
	struck LNode *next;
}LNode;

LNode *L;
L=(LNode*)malloc(sizeof(LNode));//用malloc函数为结构类型为LNode的节点分配一片空间并把空间的地址存储在L里
//我们一般用指针的名字来命名节点 有人问会不会混乱我们一般都会根据上下文的
//描述来判读他是指针还是节点 
 A->next=B;
 B->next=C;
 //对于结构体内部的单个变量我们可以称之为这个结构体的分量如果你通过指向某
 //个结构体的指针来取这个结构体中的某个分量只能用箭头

小结:数据的逻辑结构和物理结构是密切相关的,在学习数据的过程中会发现,任何一个算法的设计取决于选定的数据逻辑结构,而算法的实现依赖于所采用的存储结构。

扩展
C语言中malloc是动态内存分配函数可以根据你的指定分配一个合适大下的空间并且返回给你这个空间的地址因此定义一个指针来存储这个地址。
函数原型:void malloc(unsigned int num_bytes);
参数:num_bytes 是无符号整型,用于表示分配的字节数。
返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。void
表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者…)
功能:分配长度为num_bytes字节的内存块
注意:当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

你可能感兴趣的:(数据结构入门准备)