数据结构与算法1:数组1

来源:互联网 发布:怎么查看服务器域名 编辑:程序博客网 时间:2024/06/05 10:03

数组是由一段连续固定大小的内存构成的存储结构,这样决定数组具备几个特性:

(1)、存储空间固定,使用前申请预估规格大小。当然我们也可以实现一个动态数组,按照一定步长延长数组,但是不可避免需要拷贝。

(2)、插入删除需要移动元素,因为存储的元素是连续的。当然也可以设计一种存储结构,可以实现间断存储,但是这样需要增加额外的数据段描述是否存在数据。

(3)、查找需要使用数组下标进行遍历,也带来好处是可以用下标常数时间获取到。


参考:http://blog.csdn.net/zhangxiangdavaid/article/details/25057811 约瑟夫问题数组解法稍微进行修改

需要注意的几个地方是:数组遍历到最后一个值需要从头开始


#include <stdio.h>#include <stdlib.h>int next(int * iArray, int iPos, unsigned int uiNum, unsigned int uiJumpNum){    int i = 0;        while(1)    {        iPos = (iPos + 1)%uiNum;        if(iArray[iPos] == 0)                i++;            if(i == uiJumpNum)              return iPos;      }}int yuesehu(unsigned int uiNum, unsigned int uiJumpNum){    int *iArray;    int iPos;    int iCount = uiNum;    iArray = (int *)malloc(sizeof(int) * uiNum);    if (NULL == iArray)    {        return 1;    }    memset(iArray, 0, sizeof(int) * uiNum);    printf("out:\n");    iPos = uiJumpNum % uiNum - 1; //因为计算的时第几位,所以数组下表后退一位    while(iCount > 1)    {        printf("%d ", iPos+1);  //按照人正常的理解,数组下标加1表示第几位        iArray[iPos] = 1;        iCount--;        iPos = next(iArray, iPos, uiNum, uiJumpNum);   }      printf("\n");   free(iArray);   return iPos + 1;           //按照人正常的理解,数组下标加1表示第几位}int main(){    unsigned int uiNum,uiJumpNum;    int iLast;        printf("enter person num:");    scanf("%d", &uiNum);    printf("\n");    printf("enter jump num:");    scanf("%d", &uiJumpNum);    printf("\n");    if (uiNum == 0 || uiJumpNum == 0)        return 1;    iLast = yuesehu(uiNum, uiJumpNum);    printf("Last: %d\n", iLast);    return 0;}





原创粉丝点击