数据结构总结

数据结构大总结:
 * 数据结构是数据元素之间一种或者多种特定关系的集合  数据--数据元素-数据项(表--学生信息-姓名)

 * 数据逻辑结构分为

                            1.线性结构[队列 栈 串 数组]  非线性结构 (线性结构有且只有一个开始和终端结点,并且所有的结点有且只有一个前驱和后继)

 *     2.集合(树   图) 线性结构 图形结构 树形结构
 * 数据存储结构分为:顺序存储结构[按照一定的顺序排列,并且物理地址相邻占据同一块内存空间] 链式存储结构[每一个数据都有两部分组成(数据+下一个元素的地址)]
 * 线性表:顺序表:存储密度大,可以随机存取每一个元素  但是移动删除比较复杂,并且数据元素的内容不可以进行自由扩充(ArrayList在进行扩充时,首先申请增加原容量的一半,其次创建一个为原容量3/2的数组将其数组中的元素进行复制)
 *    链式表:【链式存储结构结点在存储器中的位置是任意的,即使逻辑结构上相邻,物理上也不一定相邻】
 * 单向链表:head---data+next
 *              双向链表 :
 *              双向循环链表
 *           特殊的线性表:
 *            栈:只可以在栈顶对元素进行出栈入栈操作  先进后出
 *            队列:先进先出  ,其中在顺序队列中还会出现假溢出现象:(用front来表示队首元素的第一个位置,rear表示下一个元素的地址,当存入5个元素,经过一段时间出去了4个元素,此时front指向最后一个元素,rear已经指向数组外部,当再往里存入元素时会发生数组下标越界,但是事实上里面的存储位置都是空的,此时叫假溢出现象)
 *            解决假溢出,就用循环顺序链表...顾名思义就是将数组在逻辑上看做一个环,当front == rear, 此时为空  front指向0号位置,而rear指向5号位置,此时为满队列(实际上有一个元素的位置是空的)
 *            那么如何来判断是否空还是满呢?
 *            1.定义一个标志符flag,默认值为0, 当入队成功flag = 1,出对成功flag = 0,所以当front==rear&&flag == 0 表示队列空,同理
 *            2.使用一个计数器count(表示数组中元素的个数)count>0&& front== rear 为满
 *            3.使用(rear+1)% maxSIze == front 为满
 *           查找:顺序查找:对数组进行遍历,进行查找,找到则返回元素的索引,找不到则返回-1
 *            折半查找(二分查找):前提必须是已经进行排序的  接下来取其中间值和目标值进行比较,若目>中,则咋其原数组后半部分进行比较....结束的时候是start>end
 *           数据算法:
 *            二叉树:
 *              二叉搜索树
 *              ....

你可能感兴趣的:(数据结构总结)