常用数据结构简述 - STEMHA's Blog

常用数据结构简述

算法处理的数据在内存中的格式是什么?
我们希望数据是结构化的,方便读取,因此计算机科学家发明了数据结构

数组array

几乎所有的编程语言都自带了许多函数来处理数组,比如数组的排序

字符串string

是数组的亲戚
i = “love”
虽然长得不像数组,但的确是数组,在计算机幕后的确是这样的
字符放在内存中以/0结尾,不是”字符0“而是”二进制0“,这叫字符“null”,表示字符串结尾。

  • 这个字符非常重要,如果调用print函数,会从开始位置逐个显示到屏幕,但是得直到什么时候停下来!否则会把内存中的所有内容输出。

矩阵matrix

数组的数组

结构体struct

多个变量打包在一起,在内存中会自动组织到一起的

节点node与指针

struct可以构建复杂的数据结构,比如node

1
2
3
4
5
struct listnode
{
int value;
listnode * next;
};

链表linked list

使用node来构建链表
灵活性是通过每个节点指向下一个节点实现的
循环链表(circular list):尾部的next指向开头
非循环链表:尾部节点指针值是null
链表使用的时候很少看具体地址么,而是经常使用链表的抽象模型

链表的优点

  • 容易重新排序,两端缩减,分割,倒序等
  • 因为灵活很多数据结果可以用链表实现,比如队列和栈

队列queue

FIFO
队列的链表实现
比方1->2->3->4->5
可以让队列头指向1,队列尾部指向5 (也就是链表的节点连接是反向的)
入队(enqueuing)出队(dequeuing)

栈stack

LIFO
入栈(push onto the stack)和出栈(pop from the stack)

树tree

1
2
3
4
5
6
struct treenode
{
int value;
listnode * nextleft;
listnode * nextright;
};

最重要的性质:树到根是单向的

二叉树 binary tree

每个节点至多两个孩子

图graph

顶点多对多

参考资料

Crash Course Computer Science

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×