一 .实现字符串的拷贝功能。

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;
}

5 对 “程序员笔试常用算法(一)”的想法;

评论被关闭。