2016/11/28
来源:互联网 发布:心神战斗机 知乎 编辑:程序博客网 时间:2024/04/29 05:55
1631-5 黄加勉 <2016.11.28> 【连续第58天总结】
A.今日任务
1.链表(100%)
2.二叉树(20%)
B.具体内容
1.当往链表中插入元素时,需要先拷贝一份首元素指针,作为迭代因子进行迭代
可以采用while方法:
Node *tempNode = m_pList;
while(tempNode != NULL)
{
tempNode = tempNpde->m_pNext;
}
或者采用for循环:
for(Node *tempNode = m_pList; tempNode != NULL; temp = temp->m_pNext)
{
//do
}
2.清空链表实际上就是遍历链表再以此释放内存空间,置空指针的过程,不过清空链表要保留首尾,只需要把首尾指针域置空,数据域清空即可
因为链表是线性的节点,所以insert(int index)函数的真正含义应该是往m_pList[index]的后面插入一个元素,所以首元素就不能直接用插入的方法赋值,因为首元素的位置是0,比首元素再往前一位的不存在啊。
所以像这样直接从头插入元素的完全可以写一个addHead函数,当index == 0时直接调用即可,这样即可以在main里调用,也可以用成员函数调用,多好。。
3.感觉链表比数组相比优点就是往首尾插入元素时速度较快,但是往中间插入元素时实在是比较繁琐,各种指针来回赋值很是让人头大:
void List::insertElement(int index, Node *pNode)
{
//判断下表是否越界
if (index < 0 || index >= m_iLength)
{
cout << "insert -- index out of range" << endl;//下表越界
return;
}
Node *tempNode = m_pList; //拷贝首指针作为迭代因子
Node *newNode = new Node(); //分配待插入对象
newNode->m_iDate = pNode->m_iDate; //待插入对象数据域赋值
for (int i = 0; i < index; i++) //遍历至index位
{
tempNode = tempNode->m_pNext;
}
newNode->m_pNext = tempNode->m_pNext; //index位指针域赋值给待插入元素指针域
tempNode->m_pNext = newNode; //index位指针域指向带插入元素
//元素插入成功,链表长度+1
m_iLength++;
}
但是多练习就好些了,
不像数组可以直接通过索引获取元素,链表获取元素的方式只有遍历(当然如果用一个变量保存上次插入元素的位置,下次插入元素时就可以节省一些时间,不过代码复杂许多)
所以我觉得除非迫不得已,数组还是最好的选择吧。
4.到了树的部分,瞬间觉得高端起来了。。
5.二叉树数组依然是对数组的操作,不过赋值的下表是按照金字塔形增长的。一个二叉树是指一个每个父节点至多拥有两个子树的树
两个子树分别为左子树和右子树,左子树的下表为父节点下标*2+1,右节点为父节点*2+2,用这个规律便可以给树赋值。
6.树的精华自然是在他的遍历,这个明天再学。。
C.明日任务
1.二叉树编码
2.二叉树遍历
blog.csdn.net/voooooh_8
A.今日任务
1.链表(100%)
2.二叉树(20%)
B.具体内容
1.当往链表中插入元素时,需要先拷贝一份首元素指针,作为迭代因子进行迭代
可以采用while方法:
Node *tempNode = m_pList;
while(tempNode != NULL)
{
tempNode = tempNpde->m_pNext;
}
或者采用for循环:
for(Node *tempNode = m_pList; tempNode != NULL; temp = temp->m_pNext)
{
//do
}
2.清空链表实际上就是遍历链表再以此释放内存空间,置空指针的过程,不过清空链表要保留首尾,只需要把首尾指针域置空,数据域清空即可
因为链表是线性的节点,所以insert(int index)函数的真正含义应该是往m_pList[index]的后面插入一个元素,所以首元素就不能直接用插入的方法赋值,因为首元素的位置是0,比首元素再往前一位的不存在啊。
所以像这样直接从头插入元素的完全可以写一个addHead函数,当index == 0时直接调用即可,这样即可以在main里调用,也可以用成员函数调用,多好。。
3.感觉链表比数组相比优点就是往首尾插入元素时速度较快,但是往中间插入元素时实在是比较繁琐,各种指针来回赋值很是让人头大:
void List::insertElement(int index, Node *pNode)
{
//判断下表是否越界
if (index < 0 || index >= m_iLength)
{
cout << "insert -- index out of range" << endl;//下表越界
return;
}
Node *tempNode = m_pList; //拷贝首指针作为迭代因子
Node *newNode = new Node(); //分配待插入对象
newNode->m_iDate = pNode->m_iDate; //待插入对象数据域赋值
for (int i = 0; i < index; i++) //遍历至index位
{
tempNode = tempNode->m_pNext;
}
newNode->m_pNext = tempNode->m_pNext; //index位指针域赋值给待插入元素指针域
tempNode->m_pNext = newNode; //index位指针域指向带插入元素
//元素插入成功,链表长度+1
m_iLength++;
}
但是多练习就好些了,
不像数组可以直接通过索引获取元素,链表获取元素的方式只有遍历(当然如果用一个变量保存上次插入元素的位置,下次插入元素时就可以节省一些时间,不过代码复杂许多)
所以我觉得除非迫不得已,数组还是最好的选择吧。
4.到了树的部分,瞬间觉得高端起来了。。
5.二叉树数组依然是对数组的操作,不过赋值的下表是按照金字塔形增长的。一个二叉树是指一个每个父节点至多拥有两个子树的树
两个子树分别为左子树和右子树,左子树的下表为父节点下标*2+1,右节点为父节点*2+2,用这个规律便可以给树赋值。
6.树的精华自然是在他的遍历,这个明天再学。。
C.明日任务
1.二叉树编码
2.二叉树遍历
blog.csdn.net/voooooh_8
0 0
- 2016/11/28
- 2016-11-28
- CVPR 2016-11-28
- 【交易日记】2016-11-28
- 2016/11/28学习工作日志
- 2016-06-11 星期六 18:28:27 下午
- python数据结构学习笔记-2016-11-28-01-表达式树
- 11\11\28
- 彩笔笔记2016/11/28——java、jar基本命令与i++与基础运算
- [2016/11/28]判断一个数是否是回文数,但不能开多余空间
- 1508-张晨曦总结《2016年-11月-28日》【连续38天总结】
- 1622-5 孔富晨 总结《2016年11月28日》 【连续第59天总结】
- 1613-3-傅溥衍 总结《2016年11月28日》【连续第五十九天总结】
- 2016年11月28日学习总结----printf格式化输出的注意点及应用
- 2016/3/28/
- [2016-3-28 Test]
- 2016/3/28
- 2016-03-28缓存
- 2016/11/27
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- 构造函数
- Spring实战(第4版) Spring Inaction 笔记(第一章)依赖注入和AOP
- 史上最全的WebSettings说明
- 2016/11/28
- android笔记—多选联系人
- ruby/python利用pack unpack读取二进制文件
- OpenStack-M版(Mitaka)搭建- – -计算服务(Nova)篇
- Android服务Service
- 特殊回文数
- vagrant nginx 操作
- 自定义dialog实例子
- python数据分析第一步:读取以及查看数据