数据结构学习笔记

1.使用容器vector:头文件:vector、iostream、algoritm

(1)定义vector<int>v1(无初值);vector<int>v2(3,0)(三个元素初值为0)

(2)实用迭代器的方式将容器中的值输出来

for(vector<int>::iterator begin i = v2.begin();i!=v2.end();i++)

{

            cout << *i << endl;

}

(3)插入

eg:v2.insert(v2.begin(),3)(在开头插入3);v2.pushback(0)(在尾部插入0);v2.insert(v2.end(),v2.begin(),v2.end())(连接两个v2)

(4)删除元素

eg:v2.erase(v2.begin())(删除开头的指定元素);v2.erase(v2.begin(),v2.end()) (删除整体的元素)

(5)访问元素

eg: cout << v2[0] (访问第一个元素);或者cout <<v2.at(0)(访问第一个元素)

(6)分配assign

eg:v2.assign(3,4)(分配3个4元素);v3.assign(v2.begin(),v2.end())(分配v2的元素到v3中)

(7)二维数组

vector<vector<int>> v2;vector<int> v2_0<3,4>;vector<int> v2_1<3,6>;v2.push_back(v2_0);v2.push_back(v2_1);//这个时候遍历就可以不用迭代器了,直接 for(int i = 0;i<v9.size();i++)就可以了

2.queue:头文件:queue、iostream

(1)定义:queue<int>ql;

(2)ql.pop():弹出队列的第一个元素;ql.push(x),将x 放入ql的末端;ql.front():ql的第一个元素;ql.back():ql的最后一个元素。

3.array(数组):头文件:array、iostream

(1)定义:array<int,10> myarray;

(2)获取数组中元素的方式

如果是直接获取第n个,可以用myarray[3];如果是获取所有的,则可以利用遍历的方式

for(auto it = myarray.begin();it != myarray.end(); it++)

4.树学习

(1)定义:树是一个由n(n>=1)的有限个节点组成的有层次关系的集合。

(2)性质:a.结点、父结点、子结点、根结点。每个结点有0个或者多个子节点,其中非根节点有一个父结点。

            b.双亲、孩子、兄弟。如果一个结点有子结点,则该结点为子结点的双亲,子结点为双亲结点的孩子;其中有相同双亲结点的子结点互为兄弟;

            c.结点的度:结点的子树的个数;叶子结点:度为0的结点;树的度:树中结点最大的度;层次:跟结点的层次为1,其他结点的层次为双亲结点的层次加1;树的高度:树中结点最大的层次;

(3)二叉树是每个结点最多有两个子树的树结构;二叉树可以是空集;根可以有空的左、右子树;也可以左右子树都为空。

a.二叉树种类:满二叉树、完全二叉树、二叉查找树。其中满二叉树是除了最下面一层结点外,每个结点都有两个左右子树;完全二叉树则是只有最下面两层的度可以小于2,且最下层的结点集中在靠左的若干位置;二叉查找树则是对于某结点的值,它的左子树的值比该值小,右子树的值比该值大。

b.二叉树性质:第i层结点数目最多有2^{i}-1;包含n个结点的二叉树的高度至少为log_{2}n +1;任意一颗二叉树,叶子结点的个数为n0,度为2的结点个数为n2,则存在n0=n2+1。(可以这样推导,不妨再设总结点数为n,度为1的结点个数为n1。则显然 n=n0+n1+n2,再根据层次关系 n= 0*n0+1*n1+2*n2+1 =n1+2n2+1。两式联立,可以推出)

(4)路漫漫其修远兮,树的种类还多着呢,只有积硅步成千里了

下面学习下平衡树。对于二叉搜索树,其期望高度为log_{2}n,这样也决定了它的时间复杂度为0(log_{2}n)。但是在某些极端的情况下,二叉搜索树会变成线性的,类似于链表的形式,这样时间复杂度也退化成线性的了,0(n)。对于这种情况可以通过随机建立二叉搜索树的形式来避免,但是在删除操作的过程中,我们使用了将删除点的后继代替了它本身,导致会出现左边多右边少的情况,使得树的平衡性不好。因此提出了平衡树,它可以是棵空树或者子树间的高度差绝对值不能超过1。这样也使得时间复杂度也良好的稳定在0(log_{2}n)。对于最小二叉平衡树的还存在节点公式为:F(n) = F(n-1)+F(n-2)+1(左子树节点+右子树节点+根节点)

 

参考文献:https://blog.csdn.net/u011939755/article/details/80572846

                    https://blog.csdn.net/Leader_wang/article/details/82959362

                    https://blog.csdn.net/xiaoquantouer/article/details/65631708

                    http://www.cnblogs.com/maybe2030/p/4732377.html#_label2

                    https://www.cnblogs.com/polly333/category/720001.html

未完待续。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值