码迷,mamicode.com
首页 > 编程语言 > 详细

(C/C++) 算法,编程题

时间:2015-04-05 23:23:18      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

1. 求一个数的二进制中的1的个数。

int func(int x)
{
    int count = 0; 

    while (x)
    {
        count++; 
        x = x& (x - 1); 
    }

    return count; 
}

2. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。

int _tmain(int argc, _TCHAR* argv[])
{
    const char *srcStr = "This is a source string.";
    
    //char *desStr = (char *)malloc(sizeof(srcStr));    // Or below:
    char *desStr = (char *)malloc(sizeof(char)* strlen(srcStr) + 1); 

    myStrcpy(desStr, srcStr);

    printf("Copy result: %s", desStr); 
}

char *myStrcpy(char *strDest, const char *strSrc)
{
    if (strSrc == NULL || strDest == NULL)
    {
        return NULL; 
    }

    if (strDest == strSrc)
    {
        return strDest; 
    }

    char *strDestStart = strDest; 

    while (*strDest !=\0)
    {
        *strDest++ = *strSrc++;
    }

    return strDestStart;
}

3. 链表题:

一个链表的结点结构

struct Node
{
  int data ;
  Node *next ;
};
typedef struct Node Node ;

  

(1)已知链表的头结点head,写一个函数把这个链表逆序

思路: 用三个指针p0,p1,p2,从头到尾依次遍历并反转结点

int _tmain(int argc, _TCHAR* argv[])
{
	int linkedListLength = 5; 
	Node *myList = new Node(); 
	Node *p = myList; 
	printf("Original linked list is:"); 
	for (int i = 0; i < linkedListLength; i++)
	{
		Node *node = new Node(); 
		node->data = i;
		printf(" %d", i);
		p->next = node;
		p = node;
	}

	Node *reversedMyList = ReverseLinkedList(myList); 

	printf("\r\nReversed linked list is:"); 
	Node *r = reversedMyList; 
	while (r->next != NULL)
	{
		printf(" %d", r->data); 
		r = r->next;
	}
}

Node *ReverseLinkedList(Node *head)
{
	// NULL
	if (head == NULL)
	{
		return NULL; 
	}

	// One node only.
	if (head->next == NULL)
	{
		return head; 
	}

	// Two or more than two nodes.
	Node *p0 = head; 
	Node *p1 = p0->next; 
	Node *p2 = p1->next;   //p2 maybe null; 

	p0->next = NULL;

	while (p2 != NULL)
	{
		p1->next = p0; 
		p0 = p1;
		p1 = p2;
		p2 = p2->next; 
	}
		
	p1->next = p0; 
	return p1; 
}

  

(C/C++) 算法,编程题

标签:

原文地址:http://www.cnblogs.com/fdyang/p/4387663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!