1. 自己实现memcpy
void *MyMemCopy(void *dest,const void *src,size_t count)
{
char *pDest=static_cast<char *>(dest);
const char *pSrc=static_cast<const char *>(src);
//注意,这里是关键,为什么要这样比较呢?理由何在?
if( pDest>pSrc && pDest<pSrc+count )
{
for(size_t i=count-1; i<=0; ++i)
{
pDest[i]=pSrc[i];
}
}
else
{
for(size_t i=0; i<count; ++i)
{
pDest[i]=pSrc[i];
}
}
return pDest;
}
2. 两个有序链表合成一个有序链表
//递归算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
NodePtr p1;
p1=NULL;
if(one_head == NULL && two_head == NULL)
return p1;
else if(one_head == NULL && two_head != NULL)
return two_head;
else if(one_head != NULL && two_head == NULL)
return one_head;
else
{
if(one_head->data <= two_head->data)
{
p1=one_head;
p1->link = merge_lists(one_head->link,two_head);
}
else
{
p1=two_head;
p1->link = merge_lists(one_head,two_head->link);
}
return p1;
}
}
//迭代算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
if(one_head == NULL)
return two_head;
if(two_head == NULL)
return one_head;
NodePtr head = NULL;
if(one_head->data < two_head->data)
{
head = one_head;
one_head = one_head->link;
}
else
{
head = two_head;
two_head = two_head->link;
}
NodePtr current_Ptr = head;
while(one_head !=NULL && two_head !=NULL)
{
if(one_head->data <= two_head->data)
{
current_Ptr->link = one_head;
current_Ptr = one_head;
one_head = one_head->link;
}
else
{
current_Ptr->link = two_head;
current_Ptr = two_head;
two_head = two_head->link;
}
}
if(one_head != NULL)
current_Ptr->link = one_head;
if(two_head != NULL)
current_Ptr->link = two_head;
return head;
}