美文网首页
01 - 关于二维数组的翻转与旋转 低端实现

01 - 关于二维数组的翻转与旋转 低端实现

作者: 大L君 | 来源:发表于2016-04-17 11:35 被阅读291次

    先贴一段.c来观察实现结果

    #define H 4 //宏定义- 行数
    #define L 4 //宏定义- 列数
    
    #include"stdio.h"
    #include"arraryTwoDis.h"
    //函数声明
    
    int main(int argc, const char * argv[])
    {
        //定义2维数组
        int arraryTwoDis[H][L]={
            {4,3,2,1},
            {5,4,5,6},
            {6,3,2,7},
            {7,8,9,8}};
        _arraryTwoDisFlipUpDown(arraryTwoDis);//2维数组上下翻转
        _arraryTwoDisFlipL(arraryTwoDis);//2维数组沿左对角线翻转
        _arraryTwoDisFlipR(arraryTwoDis);//2维数组沿右对角线翻转
        _arraryTwoDisRevolveL(arraryTwoDis);//2维数组向左旋转
        _arraryTwoDisSequence(arraryTwoDis);//二维数组整体冒泡排序
        _arraryTwoDisUp(arraryTwoDis);//2维数组正序遍历
        _arraryTwoDisDowm(arraryTwoDis);//2维数组逆序遍历
        printf("正序遍历:\n");
        return 0;
    }
    
    .h文件定义
    //
    //  arraryTwoDis.h
    //  数组与指针练习
    //
    //  Created by 1 on 16/1/13.
    //  Copyright © 2016年 bigL.com. All rights reserved.
    //
    
    #ifndef arraryTwoDis_h
    #define arraryTwoDis_h
    void _arraryTwoDisUp(int arrary[H][L]);//2维数组正序遍历
    void _arraryTwoDisDowm(int arrary[H][L]);//2维数组逆序遍历
    void _arraryTwoDisFlipUpDown(int arrary[H][L]);//2维数组上下翻转
    void _arraryTwoDisFlipL(int arrary[H][L]);//沿左对角线翻转2维数组
    void _arraryTwoDisFlipR(int arrary[H][L]);//沿右对角线翻转2维数组
    void _arraryTwoDisRevolveL(int arrary[H][L]);//向右旋转二维数组
    
    
    //2维数组正序遍历
    void _arraryTwoDisUp(int arrary[H][L])
    {
        printf("正序遍历:\n");
        for (int i = 0; i<H; i++) {
            for (int j = 0; j<L; j++) {
                printf("%d ",arrary[i][j]);
            }
            printf("\n");
        }
    }
    //2维数组逆序遍历
    void _arraryTwoDisDowm(int arrary[H][L])
    {
        printf("逆序遍历:\n");
        for (int i = H-1; i>=0; i--) {
            for (int j = L-1; j>=0; j--) {
                printf("%d ",arrary[i][j]);
            }
            printf("\n");
        }
    }
    
    //维数组上下翻转
    void _arraryTwoDisFlipUpDown(int arrary[H][L])
    {
        int temp;
        int i,j;
        for (i=0; i<(H/2); i++) {
            for (j=0; j<L; j++) {
                temp = arrary[i][j];
                arrary[i][j]=arrary[H-i-1][j];
                arrary[H-i-1][j]=temp;
            }
        }
        
    }
    
    //沿左对角线翻转2维数组
    void _arraryTwoDisFlipL(int arrary[H][L])
    {
        int temp;
        int i,j;
        for (i=0; i<H; i++) {
            for (j=L-1; j>i-1; j--) {
                temp = arrary[i][j];
                arrary[i][j]=arrary[j][i];
                arrary[j][i]=temp;
            }
        }
    }
    
    //沿右对角线翻转2维数组
    void _arraryTwoDisFlipR(int arrary[H][L])
    {
        int temp;
        int i,j;
        for (i=0; i<H; i++) {
            for (j=0; j<H-i; j++) {
                temp = arrary[i][j];
                printf("%d\n",temp);
                arrary[i][j]=arrary[H-1-j][L-1-i];
                arrary[H-1-j][L-1-i]=temp;
            }
        }
    }
    
    //向左旋转二维数组
    void _arraryTwoDisRevolveL(int arrary[H][L])
    {
        //复制数组
        int arraryCopy[H][L];
        for (int x=0; x<H; x++) {
            for (int y=0; y<L; y++) {
                arraryCopy[x][y]=arrary[x][y];
            }
        }
        //右旋转运算
        for (int j = 0; j<L; j++) {
            for (int i = 0; i<H; i++) {
                arrary[i][j]=arraryCopy[H-1-j][i];
            }
        }
    }
    
    #endif /* arraryTwoDis_h */
    
    

    相关文章

      网友评论

          本文标题:01 - 关于二维数组的翻转与旋转 低端实现

          本文链接:https://www.haomeiwen.com/subject/zgyolttx.html