笔试算法

最近找工作,参加过一些公司的笔试,面试。下面把笔试过的一些算法题用代码写出来,和大家分享讨论下。

一 .实现字符串的拷贝功能。char* strcpy(char* dst, char* src)//把src内存位置的字符串拷贝到dst内存位置

char* strcpy(char *dst, char *src)
{
char *tempDst = dst;
//测试字符串的长度,如果目标字符串长度大于源字符串,返回目标指针dst,否则,返回NULL
if(strlen(dst) > strlen(src))
{
while(*src != '\0')
{
*tempDst++ = *src++;
}
*tempDst = '\0';
return dst;
}
else
{
return NULL;
}
}

二. 实现链表的插入功能。(在pHead头节点后面,第i个位置插入一个新节点pNode)

struct CNode {CNode *pNext; CNode *pPrev};


BOOL Inerset(CNode *pHead, int i, CNode *pNode)//插入成功返回true,否则false

//在第i个位置插入节点,如果i大于0小于等于链表长度,插入节点成功,返回true,否则返回false
bool Inerset(CNode *pHead, int i,CNode *pNode)
{
int index = 1; //记录当前节点的位置
CNode *currentNode = pHead; //记录当前节点
//判断当前节点的位置
while(currentNode->pNext != NULL && index != i)
{
currentNode = currentNode->pNext;
index++;
}

if(index == i && currentNode->pNext != NULL)
{
pNode->pNext = currentNode->pNext;
currentNode->pNext->pPrev = pNode;
pNode->pPrev = currentNode;
currentNode->pNext = pNode;
return true;
}
else
{
return false;
}
}

三. 用递归实现查找叶子的颜色 struct CLeaf

{
  int Color;    //叶子颜色
  CLeaf* SubLeafs[];//子叶子的个数(同字符串,NULL为结束)
};

//FindColor
//返回相同颜色的叶子地址,如无返回NULL.
//Deap:相同颜色叶子的层数
CLeaf* FindColor(CLeaf* Tree, int Color, int& Deap)

//此函数的算法采用的是深度遍历,如果找到,就返回目标节点,如果为找到,就返回NULL
CLeaf* FindColor(CLeaf *Tree, int Color, int& Deap)
{
//返回目标节点
if(Tree->Color == Color)
{
return Tree;
}
else
{
CLeaf **Sub = Tree->SubLeafs;
Deap++;
//深度遍历
while(*Sub != NULL)
{
CLeaf* dstNode = FindColor(*Sub,Color,Deap);

if(dstNode != NULL && dstNode->Color == Color)
{
return dstNode;
}
else
{
Sub++;
}
}
}
Deap--;
return NULL;
}



 

 

原文地址:https://www.cnblogs.com/PerfectSoft/p/2316349.html