template <class ElemType> void Show(const ElemType &e) // 操作结果: 显示数据元素 { cout << setw(2) << e << " "; } template<class ElemType> void ShowRunK(LinkList<ElemType> &la, int k) // 操作结果: 显示链表la的各数据元素值 { ElemType e; cout << "第" << setw(2) << k << "趟排序结果:"; la.Traverse(Show); cout << endl; } template <class ElemType> void SelectSort(LinkList<ElemType> &la) // 操作结果: 以带头结点的单链表为存储结构实现简单选择排序 { ElemType t; ElemType check; ElemType emin; int min; for (int i = 1; i < la.Length(); i++) { la.GetElem(i,emin); min = i; for (int j = i + 1; j <= la.Length(); j++) { la.GetElem(j, check); if (check < emin); { min = j; la.GetElem(j, emin); } } la.GetElem(i, t); la.SetElem(i, emin); la.SetElem(min, t); ShowRunK(la, i); } }改正并简化此代码
时间: 2024-01-28 09:03:09 浏览: 63
template <class ElemType>
void SelectSort(LinkList<ElemType> &la)
{
ElemType emin;
int min;
for (int i = 1; i < la.Length(); i++)
{
la.GetElem(i, emin);
min = i;
for (int j = i + 1; j <= la.Length(); j++)
{
ElemType check;
la.GetElem(j, check);
if (check < emin)
{
min = j;
emin = check;
}
}
la.SetElem(i, emin);
}
}
相关问题
template <class ElemType, class KeyType> void InOrderHelp(BinTreeNode<ElemType> *r, const KeyType &key) // 操作结果: 从大到小输出以r为根的二叉排序树中所有的关键字值不小于key的元素值。输出时,各关键字之间隔一个空格 { } template <class ElemType, class KeyType> void InOrder(const BinarySortTree<ElemType, KeyType> &t, const KeyType &key) // 操作结果: 从大到小输出二叉排序树中所有的关键字值不小于key的元素值 { InOrderHelp((BinTreeNode<ElemType> *)t.GetRoot(), key); }
这段代码实现了从大到小输出二叉排序树中所有关键字值不小于key的元素值。其中,InOrderHelp函数是递归遍历二叉排序树的过程,而InOrder函数则是调用InOrderHelp函数并传入根节点和key值作为参数,以输出符合条件的元素值。
具体地,InOrderHelp函数的实现是先递归遍历右子树,再输出当前节点的值(如果该节点的值不小于key),最后递归遍历左子树。而InOrder函数的实现则是调用InOrderHelp函数,并将根节点转换为BinTreeNode类型的指针,以便进行递归遍历。
需要注意的是,这里的模板参数ElemType和KeyType分别代表元素类型和关键字类型,因此该代码可以处理任意类型的数据,只要该类型支持“小于等于”比较操作符。
template <class ElemType> bool IsBBTHelp(BinTreeNode<ElemType> *r,int &h) // 操作结果: 判断以r为根的二叉排序树是否为平衡二叉树, h表示二叉排序树的深度 { } template <class ElemType, class KeyType> bool IsBBT(const BinarySortTree<ElemType, KeyType> &t) // 操作结果: 判断二叉排序树是否为平衡二叉树 { int h; return IsBBTHelp((BinTreeNode<ElemType> *)t.GetRoot(), h); }
这是一个判断二叉排序树是否为平衡二叉树的函数模板。其中,IsBBTHelp是一个递归函数,用于计算以r为根节点的二叉排序树的深度,并判断其是否为平衡二叉树。而IsBBT则是调用IsBBTHelp函数来判断整个二叉排序树是否为平衡二叉树。
具体来说,IsBBTHelp函数的实现如下:
```cpp
template <class ElemType>
bool IsBBTHelp(BinTreeNode<ElemType> *r, int &h) {
if (r == nullptr) { // 空树是平衡二叉树
h = 0;
return true;
}
int lh, rh; // 左右子树的深度
if (IsBBTHelp(r->leftChild, lh) && IsBBTHelp(r->rightChild, rh)) { // 分别判断左右子树是否平衡
if (abs(lh - rh) <= 1) { // 左右子树深度差不超过1,则以r为根的二叉排序树为平衡二叉树
h = max(lh, rh) + 1; // 更新以r为根的二叉排序树的深度
return true;
}
}
return false; // 否则不是平衡二叉树
}
```
而IsBBT函数的实现就非常简单了,只需要调用IsBBTHelp函数即可:
```cpp
template <class ElemType, class KeyType>
bool IsBBT(const BinarySortTree<ElemType, KeyType> &t) {
int h;
return IsBBTHelp((BinTreeNode<ElemType> *)t.GetRoot(), h);
}
```
其中,t.GetRoot()返回二叉排序树的根节点,强制转换为BinTreeNode<ElemType>*类型后传给IsBBTHelp函数。最终返回的结果就是整个二叉排序树是否为平衡二叉树。
阅读全文
相关推荐
















