用显示的栈实现插入,完成非递归的插入. 这网吧的破显示器太烂了....自己小调了下,呵呵. 栈好久不写了,冷不丁一写,还真是遇到了问题.不过还好,现在搞清楚了. 好了,贴吧. /* 12-17-11-03-28-18.49.c -- 第十二章第十七题 */ #include <stdio.h> #include <stdlib.h> #include "treapTree.h" TreapTree Insert_T (TreapTree tt, const Item item) ; TreapTree Insert_T (TreapTree tt, const Item item) { Stack stack ; Node * scan, * newNode, * parent ; Initialize_S (&stack) ; scan = tt ; while (scan != NullNode) { if (item < scan -> item) { Push_S (&stack, scan) ; scan = scan -> left ; } else if (item > scan -> item) { Push_S (&stack, scan) ; scan = scan -> right ; } /* Otherwise it's a duplicate. */ else { Release_S (&stack) ; return tt ; } } newNode = makeNode (item) ; if (NULL == newNode) { Release_S (&stack) ; return tt ; } scan = newNode ; while (!IsEmpty_S (&stack)) { parent = Pop_S (&stack) -> items ; if (scan -> item < parent -> item) { parent -> left = scan ; if (parent -> left -> priority < parent -> priority) scan = singleRotateWithLeft (parent) ; else scan = parent ; } else { parent -> right = scan ; if (parent -> right -> priority < parent -> priority) scan = singleRotateWithRight (parent) ; else scan = parent ; } } tt = scan ; Release_S (&stack) ; return tt ; }