笔试试题

最近,接到了XXX公司的面试!有几道比较基本的算法试题如下

1、将一个单向列表逆序

2、统计在一个字符串中,字符出现次数最多的一个字符和次数

3、将一个数值转换为任意进制的格式数,并且以字符串的格式保存

下面是我自己写的,留着以后再用


typedef struct node
{
	int data;
	node* pnext;

}*lpNode, Node;

/*
	函数介绍:将单向列表逆序
	参数介绍:
			 -pHeader[in]:头节点指针
	返回值:
		   逆序后的头节点指针	
*/
lpNode Reverse(lpNode pHeader)
{
	lpNode pT,pT1,pT2;
	pT1 = pHeader;
	pT2 = pHeader->pnext;
	while(pT2)
	{
		pT = pT2->pnext;
		pT2->pnext = pT1;
		pT1 = pT2;
		pT2 = pT;
	}

	pHeader ->pnext = NULL;

	pHeader = pT1;

	return pHeader;
}

void PrintfNode(lpNode pHeader)
{
	lpNode pT = pHeader;
	while(pT)
	{
		std::cout << pT->data << std::endl;
		pT = pT->pnext;
	}
}

/*
	函数介绍:统计连续出现字符次数最多的字符和次数("aaabbbbbcccc" b出现5次)
	参数介绍:
			 -str[in]:待统计的字符串指针
			 -pcount[in,out]:统计次数的指针
	返回值:
		   出现字符最多的字符	
*/
char CountChar(char *str,int* pcount)
{
	int iLen = strlen(str);
	*pcount = 0;
	char cOut = ' ';

	for(int i = 0; i < iLen; i++)
	{
		int iCount = 1;
		for(int j = i; j < iLen; j++)
		{
			if(str[j] == str[j + 1])
				iCount++;
			else
				break;
		}

		if(iCount > *pcount)
		{
			*pcount = iCount;
			cOut = str[i];
		}
	}

	return cOut;
}

/*
	函数介绍:将数值转换为任意进制的格式字符输出
	参数介绍:
			 -iValue[in]:待转换的数值
			 -szBuf[in,out]:保存转后的字符
			 -uiDecimal[in]:要换行的进制
	返回值:
		   无	
*/
void FormatValueToString(int iValue,char *szBuf,unsigned int uiDecimal)
{
	if(szBuf == NULL) return;

	int i = 0;
	while(iValue)
	{
		//sprintf(szBuf + i++,"%d",iValue%uiDecimal);
		szBuf[i++] = iValue%uiDecimal + 48;//'0'的值为48
		iValue /=uiDecimal;
	}

	//调整高低位的位置
	int iLen = strlen(szBuf);
	for(i = 0; i < iLen/2;i++)
	{
		char ctemp = szBuf[i];
		szBuf[i] = szBuf[iLen -1 - i ];
		szBuf[iLen -1 - i] = ctemp;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	Node node_9 ={9,NULL};
	Node node_8 ={8,&node_9};
	Node node_7 ={7,&node_8};
	Node node_6 ={6,&node_7};
	Node node_5 ={5,&node_6};
	Node node_4 ={4,&node_5};
	Node node_3 ={3,&node_4};
	Node node_2 ={2,&node_3};
	Node node_1 ={1,&node_2};
	Node node_0 ={0,&node_1};

	std::cout << "****************before******************"<<std::endl;
	PrintfNode(&node_0);
	std::cout << "****************after*******************"<<std::endl;
	PrintfNode(Reverse(&node_0));

	std::cout << "****************CountChar***************"<<std::endl;
	int iCount = 0;;
	std::cout <<CountChar("abcdefghijklmnopqrstuvwxyz",&iCount)<< ":";
	std::cout<< iCount << std::endl;

	std::cout << "************FormatValueToString*********"<<std::endl;
	char buff[32] ={0};
	FormatValueToString(65535,buff,8);
	std::cout << buff <<std::endl;

	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值