算法与数据结构(CHAPTER 1)

数据结构基础


数据类型

结构型

变量中所装的是数据元素的内容,如int、double...
复杂型:
数组 二维数组可以看成一维数组里面的一维数组
结构体 用户自定义数组类型

例子:
二维数组b[3][3],包含三个元素,其中每一个元素是一个一维3元素的数组。
类似于一个一维数组a3,那么b[0][0] ~= a[0].a。

指针型

变量里面所装的值是指针,一般和结构型组合起来使用(eg:链表的结点、二叉树结点)

结点的构造

  1. 链表的结点
    链表的结点有两个域:一个是数据域、一个指针域。因为结点中的next类型是Node,所以要用typedef将struct预先定义成Node,不然内部不认识Node类型

    typedef struct Node
    {
        int data;                   //存放结点数据
        struct Node *next;          //存放Node型指针
    }Node;
    
    链表结构类型
  2. 二叉树结点
    在链表结点的基础上,再加上一个指向同类型的指针域。

    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)
{
    ...;
}

你可能感兴趣的:(算法与数据结构(CHAPTER 1))