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
0 0
原创粉丝点击