线性表实现:
数组方式:随机访问很快,常数级别。但是增删慢了,n级别。预先要知道线性表的大小
链表方式:随机访问不急,n级别。但是增删快,常数级别。就是C++的new delete操作性能不怎样,可以用Free list来维护增删的节点。对于new delete操作有5倍左右提升吧。
基于 | 数组 | 指针 |
构造 | 固定大小 | 灵活无拘束 |
扩展性 | 不能增大 | 容易 |
浪费 | 如果小量数据(大大小于构造大小),浪费空间 | 储存指针。如果节点数据小,空间利用率就很低了 |
增删 | n | 1 |
随机访问 | 1 | n |
一般来说,元素个数多,数组实现比较省位置;个数少,链表省位置些。不知大小,size变化很大的时候,一般用链表;预知到数据未来增长到什么地步,用数组。
一般来说,增删频繁的操作比较多,所以用到基于指针的链表可能比较多。
设计关键:头空;curr在分割之前
代码:暑假补上自己写的int作为元素的版本,尽量自己写。
线性结构——Stack(栈)
特性:IFO,last in first out, 先进先出
设计关键:
数据 | a | b | c | 3 | h | e | l | top = 7 | |
数组索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
链表实现,top元素在head之后。
代码:暑假补上自己写的int作为元素的版本,尽量自己写。
线性结构——Queue(队列)
特性:FIFO,first in first out, 先进先出
设计关键:数组版本要留一个空位辨别是空,还是满。
代码:暑假补上自己写的int作为元素的版本,尽量自己写。