数据结构在程序中的实现及表现形式
2016-02-18 09:14
309 查看
0. 数据结构的建立
数据结构的建立,首先是数据的设计,无论是线性的队列、栈、线性表,还是树、图等,基本的数据类型最后都将抽象为结点 None。对于结点的实现而言,其最为重要的功能便是持有的私有成员变量,以及在构造函数对这些成员变量的赋值;class Node: def __init__(self, value, next=None): self.value = value self.next = next
结点的建立:
对于链表的结点而言,一个结点至少有两个域,数据域与指针域;
class LNode: def __init__(self, elem, next_=None): self.elem = elem self.next_ = next_
对于二叉树的结点而言,一个结点至少有三个域:数据域,左指针域,右指针域;
class BinTNode: def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right
1. 队列
出队:q.head = (q.head+1)%q.len入队:q.rear = (q.rear+1)%q.len
队列为空的判断:
q.head == q.rear,显然这种方式就不能再进行判断队列为满的情况了
队列满的判断:
(q.rear+1 )%q.len == q.head,也即会牺牲掉一个存储空间;
2. Decision tree
Decision Tree:是一种对解空间的穷举;tree:很大的可能性要递归,既然牵涉到递归,以下两点必须注意
递归退出的条件,首先需要言明
只需构造中间的某一子问题,比如树(根节点,左子树,右子树),的情况,剩下的交给递归结构
有感于 从0-1背包问题到动态规划 一文中,为了用动态规划求解0/1背包问题,构造了一个二分的 Decision Tree。而这一 Decision Tree 在程序中的表现浑然一体,绝非牵强;
without_i = fastMaxVal(i-1, w, v, c, m) with_i = v[i] + fastMaxVal(i-1, w, v, c-w[i], m) # 俨然已是一个二分支的节点结构 m[(i, c)] = max(with_i, without_i)
3. 字典与hash
统计文件中单词出现的次数:## Python from collections import defaultdict words = defaultdict(int) with open(fileName) as fp: for line in fp.readlines(): for word in line.strip().split(): words[word] += 1
// C++ typedef std::map<std::string, size_t> WordCountMapType; WordCountMapType wordsInFile(const string& fileName) { std::ifstream ifs(filename); WordCountMapType words; for (std::string word; ifs >> word; ) ++words[word]; return words; }
相关文章推荐
- 数据结构绪论
- 数据结构:二叉树
- Java数据结构----栈(Stack)源码分析和个人简单实现
- 学习笔记------数据结构(C语言版)数组的顺序存储
- Python笔记(2)——数据类型和数据结构
- 数据结构学习笔记——二叉树的类型定义
- Nginx源码分析 - 基础数据结构篇 - 字符串结构 ngx_string.c
- 舞蹈链--求精密覆盖(数据结构)
- Dex文件结构及对应的数据结构
- 数据结构图文解析之:二分查找及与其相关的几个问题解析
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构
- 通过一个实例学会时间复杂度的计算
- 数据结构:JavaScript实现各种排序
- ArrayList的一些方法
- 开放定址散列算法
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
- MySQL索引背后的数据结构及算法原理
- redis原理-数据结构
- java实现的Trie树数据结构