解决具体的问题,首先要把具体的问题抽象成为数学模型,要想得到模型,必须知道数据之间的关系,在数据结构中数据之间的关系主要有
两种,线性关系和非线性关系,其中非线性关系又分为属性关系和图关系。
基本的术语:
数据 数据元素 数据项(项或者字段) 结构(关系)原子类型 结构类型
ADT(抽象数据组织和与之相关联的操作)
ADT 抽象数据的类型名{
数据对象
数据关系
基本操作
}
算法:正确性,确定性,有穷性,输入,输出,要求:正确性,可读,健壮,效率以及存储的效率
1.线性数据结构 线性表的定义:前驱和后继 ,数据元素,记录,数据项,
顺序表:数组,存储结构,每一个元素的位置:di = dl+(i-1)*C
> 多维数组的存储方式
单链表:基本操作,删除节点,添加节点,尾插法(增加一个尾指针),头插法
循环链表:循环的条件在于判断:curr.next() != head
双链表:删除,添加,查找。
查找算法,比较有意思的一点:
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {//前半截从头开始查
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {//后半截从尾巴开始查
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
链表应用:
链式存储下一元多项式的加法
链式链表按照一定的顺序(每隔几个元素)删除一定的元素
链表
栈和队列
堆栈的基本的操作:堆栈的初始化,判端栈空操作,判断栈满的操作,取顶端的元素,出栈,入栈,
堆栈的应用:数制的转换,表达式的计算和判断,转换问题和递归问题
1.数据结构和算法的基础笔记
原文:http://www.cnblogs.com/zhailzh/p/86e602d68e0d8ec563d200c9a5c5b8de.html