面试

 1.2008.02.28 方正国际 C++

struct Node
{
    int value;
 Node* pLeft;
 Node* pRight;
};

void AppendValue(Node* pRoot, int value)
{
 if ( pRoot )
 {
  if ( pRoot->value > value )
  {
   if ( pRoot->pLeft )
   {
    AppendValue(pRoot->pLeft, value);
   }
   else
   {
    Node* node  = new Node();
    node->value  = value;
    node->pLeft  =
    node->pRight = NULL;
    pRoot->pLeft = node;
   }

  }else
  {
   if ( pRoot->pRight )
   {
    AppendValue(pRoot->pRight, value);
   }
   else
   {
    Node* node    = new Node();
    node->value   = value;
    node->pLeft   =
    node->pRight  = NULL;
    pRoot->pRight = node;
   }
  }
 }
}

void MidTree(Node* pRoot)
{
 if ( pRoot )
 {
  MidTree(pRoot->pLeft);
  std::cout << pRoot->value << " ";
  MidTree(pRoot->pRight);
 }
}

/**
* 创建排序2叉树
*/
Node* CreateSortBinaryTree(int* values, int count)
{
 assert(count > 0);

 Node* pRoot = new Node();
 pRoot->pLeft   =
 pRoot->pRight  = NULL;
 pRoot->value   = values[0];

 for ( int index = 1; index < count; index++ )
 {
  AppendValue(pRoot, values[index]);
 }

 return pRoot;

int ChCmp(char lCh, char rCh)
{
 if ( lCh >= 'A' && lCh <= 'Z' )
 {
  lCh = lCh - 'A' + 'a';
 }

 if ( rCh >= 'A' && rCh <= 'Z' )
 {
  rCh = rCh - 'A' + 'a';
 }

 if ( lCh > rCh )
 {
  return 1;
 }
 else if ( lCh < rCh )
 {
  return -1;
 }

 return 0;

}

/**
* 比较字符串,忽略大小写
*/
int StrCmp(const char* lStr, const char* rStr)
{
 int res = 0;
 while ( *lStr != '/0' && *rStr != '/0')
 {
  res = ChCmp(*lStr, *rStr);

  lStr++;
  rStr++;

  if ( res == 1 || res == -1 )
  {
   break;
  }

 }
 
 if ( res == 0 )
 {
  if ( *lStr != '/0' )
  {
   assert(rStr == '/0');
   res = 1;
  }
  if ( *rStr != '/0' )
  {
   assert(rStr =='/0');
   res = -1;
  }
 }

 return res;

}

/**
* 实现类似vector的类
*/
const int INIT_ALLOC = 3;
template < class Type >
class MyVector
{
public:

 MyVector()
 {
  m_values  = (Type*)::malloc(INIT_ALLOC*sizeof(Type));
  m_size    = 0;
  m_caplity = INIT_ALLOC;
 }

 ~MyVector()
 {
  free(m_values);
  m_values  = NULL;
  m_size    =
  m_caplity = 0;
 }

 void Append(const Type& value)
 {
  m_size += 1;
  Alloc();
  m_values[m_size - 1] = value;
 }

 bool Delete(int index)
 {
  if ( index < m_size && index >=0 )
  {
   if ( m_size > (index + 1) )
       ::memcpy(m_values+index, m_values+index+1, (m_size - index - 1)*sizeof(Type));
   m_size--;
   return true;
  }
  return false;
 }

 void Print()
 {
  std::cout << std::endl;
  for ( int i = 0; i < m_size; i++ )
  {
   std::cout << m_values[i] << " ";
  }
  std::cout << std::endl;
 }

private:
 void  Alloc()
 {
  if ( m_caplity < m_size )
  {
   m_caplity += INIT_ALLOC;
   if ( m_values )
       m_values = (Type*)::realloc(m_values, m_caplity * sizeof(Type));
   else
    m_values = (Type*)::malloc(m_caplity * sizeof(Type));
  }
 }
 int   m_caplity;
 int   m_size;
 Type* m_values;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值