数据结构基础
数据类型
结构型
变量中所装的是数据元素的内容,如int、double...
复杂型:
数组
二维数组可以看成一维数组里面的一维数组
结构体
用户自定义数组类型
例子:
二维数组b[3][3],包含三个元素,其中每一个元素是一个一维3元素的数组。
类似于一个一维数组a3,那么b[0][0] ~= a[0].a。
指针型
变量里面所装的值是指针,一般和结构型组合起来使用(eg:链表的结点、二叉树结点)
结点的构造
-
链表的结点
链表的结点有两个域:一个是数据域、一个指针域。因为结点中的next类型是Node,所以要用typedef将struct预先定义成Node,不然内部不认识Node类型typedef struct Node { int data; //存放结点数据 struct Node *next; //存放Node型指针 }Node;
-
二叉树结点
在链表结点的基础上,再加上一个指向同类型的指针域。typdef struct BTNode { int data; struct BTNode *lchild; //左子结点指针 struct BTNode *rchild; //右子结点指针 }BTNode;
创建新结点方法 模式固定,容易记忆
BTNode *BT; BT = (BTNode*)malloc(sizeof(BTNode));
//动态申请数组空间的办法 int *p; p = (int*)malloc(n * sizeof(int));
ps:其中sizeof不是函数,是运算符
函数
被传入的参数改变
若想修改传入参数的值,要用到函数参数的引用型定义(C中靠传入变量地址来实现,C++可以直接采用引用实现)
void f(int &x)
{
++x;
}
如果传入的是指针型变量(在树与图的算法中得到广泛运用)
void f(int *&x)
{
++x; //地址+4
}
只要数据是数组就直接是引用型
- 一维数组
void f(int x[], int n)
{
...;
}
- 二维数组(maxSize必须有值)
void f(int x[][maxSize], int n)
{
...;
}