zoukankan      html  css  js  c++  java
  • 数据结构实现时的注意事项

    1. 普通队列与循环队列

    如果普通队列和循环队列的实现都是基于一块连续的线性空间,比如 Python 的 list,对于循环队列而言,它的队列头(head)指向的就未必是物理上的第一个位置,而可以是物理上的任意位置。

    def _extend(self):
        old_len = self._len
        self._len *= 2
        new_elems = [0]*self._len
        for i in range(old_len):
            new_elems[i] = self._elems[(i+self._head)%old_len]
        self._elems, self._head = new_elems, 0

    2. 树与二叉树

    注意区别,空树是没有任何节点的树,只有一个(根节点)结点的树当然不是空树;

    • 空树的高度,需要自定义,一般取 -1

      
      #define stature(p) (p)? (p->height) : -1
      

    为二叉树插入新的结点时,需要注意的是,当一个元素被插入到一棵空的二叉树时,需要改变指向根的指针,

    SearchTree Insert(ElementType X, SearchTree T) {
        if (!T) {
            T = (SearchTree)malloc(sizeof(struct TreeNode));
            if (!T) ...
            T->Element = X;
            T->Left = T->Right = NULL;
        }
    }

    3. 二叉树的遍历

    不再是:

    for (int i = 0; i < t.size; ++i)

    而是:

    int lc, rc;
    for (int i = 0; i*2+1 < t.size; ++i)
            // i*2 + 1 是左孩子
            lc = 2*i + 1;
            if (lc < t.size-1)
                rc = lc + 1;
  • 相关阅读:
    EditText之边框颜色
    Android之drawable state各个属性详解
    Android-第三天
    Android 问题
    ios VS android
    Android-第二天(2)
    collapse
    2020/3/7
    2020/3/6
    P3825 [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424037.html
Copyright © 2011-2022 走看看