数据结构局限

c++实现,教材源自清华大学邓俊辉版,本节内容为绪论里的局限。

Posted by LJJ on April 26, 2018

局限

缓存

循环移位问题:

YCeaxx.png

代码实现;

#include <iostream>
#include <stdio.h>
using namespace std;

int dd_shift(int *A, int n, int s, int k){
    int b = A[s];
    int i = s, j = (s+k) % n;
    int mov = 0; // 记录移动次数
    while(s!=j){
        A[i] = A[j];
        i = j;
        j = (i+k) % n;
        mov++;
    }
    A[i] = b;
    return mov + 1;
}

void dd_shift1(int *A, int n, int k){
    for(int s = 0, mov = 0; mov < n; s++){
        mov += dd_shift(A, n, s, k);
    }
}

int main()
{
    int A[9]={1,2,3,4,5,6,7,8,9};
    cout << "原数列为:" << endl;
    for(int j=0;j<9;j++)
        printf("%d ", A[j]);

    cout << "" << endl;
    dd_shift1(A, 9, 3);
    cout << "循环移位后的数列为:" << endl;
    for(int j=0;j<9;j++)
        cout << A[j] <<" ";
    return 0;
}

实现效果:

YCKsXt.png

字宽

YCJIm9.png

随机数

打乱数列

  • 代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

// 数列重新洗牌
void t_shuffle(int A[], int n){
    while(1 < n){
        swap(A[rand() % n], A[--n]);
    }
}

int main()
{
    int A[9]={1,2,3,4,5,6,7,8,9};
    cout << "原数列为:" << endl;
    for(int j=0;j<9;j++)
        printf("%d ", A[j]);

    cout << "" << endl;
    t_shuffle(A, 9);
    cout << "打乱后的数列为:" << endl;
    for(int j=0;j<9;j++)
        cout << A[j] <<" ";
    return 0;
}

实现效果:

YCJXlD.png