用c++程序设计与数据结构中的各种算法,数据组织方式来进行命题

2025-05-05 04:50:14
推荐回答(1个)
回答(1):

好, 我改简单点, main函数里写了用法. 还有什么不懂再问
#include "stdafx.h"
#define MAX_NUM_BIT_LEN (100)

/*就地逆置 iArray数组指针, iLength数组长度*/
void reverselist(int iArray[], int iLength)
{
int iStart = 0;
int iEnd = iLength - 1;
while (iStart < iEnd)
{
int chTemp;
chTemp = iArray[iStart];
iArray[iStart] = iArray[iEnd];
iArray[iEnd] = chTemp;
++iStart;
--iEnd;
}
}
/*单链表的合并 chlistA 为A表指针, iLengthA为A表长度,chlistB为B表指针,iLengthB为B表长度,函数返回合并后表的指针, 长度为iLengthA + iLengthB*/
int *mergelist(int chlistA[], int iLengthA, int chlistB[], int iLengthB)
{
int *lpResult = new int[iLengthA + iLengthB];
int iIndex = 0;

int i = 0;
int j = 0;
while (i < iLengthA || j < iLengthB)
{
if (i < iLengthA && j < iLengthB)
{
if (chlistA[i] > chlistB[j])
{
lpResult[iIndex] = chlistA[i];
++iIndex;
++i;
}
else
{
lpResult[iIndex] = chlistB[j];
++iIndex;
++j;
}
}
else
{
if(!(i < iLengthA))
{
lpResult[iIndex] = chlistB[j];
++iIndex;
++j;
}
if(!(j < iLengthB))
{
lpResult[iIndex] = chlistA[i];
++iIndex;
++i;
}
}
}
return lpResult;
}

/*这个是进制转换, iValue为被转换的数字
iNum为进制数, lpszResult结果存放字符串*/
void ConvertNumber(int iValue, int iNum, char *lpszResult)
{
if (NULL == lpszResult)
{
return;
}
int iNumberArray[MAX_NUM_BIT_LEN];
int iIndex = 0;
while (iValue > 0)
{
int iMode = iValue % iNum;
iValue = iValue / iNum;
iNumberArray[iIndex++] = iMode;
if (iValue < iNum)
{
iNumberArray[iIndex] = iValue;
break;
}
}
for (int i = 0;i <= iIndex; i++ )
{
if (iNumberArray[iIndex - i] < 10)
{
lpszResult[i] = (char)iNumberArray[iIndex - i] + 48;
}
else
{
lpszResult[i] = (char)iNumberArray[iIndex - i] + 55;
}
}
lpszResult[++iIndex] = 0;
}

int main(int argc, char* argv[])
{
int listA[5] = { 2 , 4, 6, 8, 10};
int listB[5] = {1 ,3, 5, 7 ,9};
/*逆置 listA表*/
reverselist(listA, 5);
/*合并listA, listB表*/
int *lpret = mergelist(listA, 5, listB, 5);

char temp[20];
/*100转换成16进制*/
ConvertNumber(100, 16, temp);
/*注意: 用完合并后的表要自己释放内存*/
delete[] lpret;
return 0;
}