1. C++ 拷贝构造函数被调用的情形:
1)已存在对象初始化新创建的对象;
2)类对象作为形参,接受实参值; 原理:栈中创建的局部对象;
3)函数返回值为类对象;原理:创建的临时返回对象;
2. 两种重要的数据结构在具体实现上的问题总结(在此先仅讨论它们的链式表示)
1)链队列
具体实现说明:为了操作方便起见,给链队列添加一个头结点,并令头指针指向头结点,那么队头结点即是头结点指向的结点。
空队列:头指针和尾指针均指向头结点,头结点指针域的值指向NULL;这一点可以作为将队列清为空队列的依据。
销毁队列:释放所有的结点,即一个结点都不留,注意最后头尾指针均指向NULL;
清空队列:是将队列置为空,最后保留头结点。
2)链栈
明确栈进出元素的特点:先进后出,只能从栈顶(一端)进入或删除元素;故其函数操作实现上同样要依据这一条件;
实现说明:这里栈的链式表示由数据结点、栈顶指针和栈底指针表示,链栈无头结点;
DestroyStack 销毁栈:一个结点都不留,从栈顶开始,一个个释放结点,直至栈尾;
ClearStack 把链栈置为空栈:首先说明,最终要保留栈顶top所指向的结点(该结点数据域并未使用,即没有赋值),从栈顶结点的下一个结点开始释放,直至释放栈底指针;最终top和base指向同一个结点。