`
dickyzhu
  • 浏览: 107736 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

常见算法

阅读更多
二叉树深度的递归算法
int height(BTNODE *t)
{
   if(!t)
   {
      return 0;
   }
   int left_height = height(t->left_child);

   int right_height = height(t->right_child);

   return (left_height > right_height ? left_height+1:right_height+1);

} 

遍历二叉树的非递归算法
void    PreOrder(BiTree T, Status ( *Visit ) (ElemType e))
{ 
InitStack(S);

while ( T!=NULL || !StackEmpty(S)){

while ( T != NULL ){

Visit(T->data) ;

Push(S,T);

T = T->lchild;

}

if( !StackEmpty(S) ){

Pop(S,T);

T = T->rchild;

}

}

}

排序算法:
1.数据类型
#define MAXSIZE 20     //一个用作示例的小顺序表的最长长度

typedef int KeyType;  //定义关键字类型为整数类型

typedef struct{

KeyType key;//关键字项

InfoType otherinfo;//其他数据项

}RedType;//记录类型

typedef struct{

RedType r[MAXSIZE+1];//r[0]闲置或用作哨兵单元

int length;//顺序表长度
}SqList;
2.直接插入排序
思想:将一个记录插入到已排好的有序表中,从而得到一个新的,记录数增1的有序表
算法:
void InsertSort(SqList &L){

 for( i = 2; i<=L.length; ++i )

     if( LT(L.r[i].key, L.r[i-1].key) ){  //"<"

         L.r[0] = L.r[i] ; //复制为哨兵

         L.r[i] = L.r[i-1] ;

         for( j = i-2 ; LT(L.r[0].key,L.r[j].key) ; --j )

             L.r[j+1] = L.r[j] ; //记录后移

          L.r[j+1] = L.r[0] ;  //插入到正确位置
   }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics