美文网首页
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 - 关于二维数组的翻转与旋转 低端实现

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

  • 矩形数组的各种翻转旋转

    矩形数组水平翻转、垂直翻转、对角线翻转、逆时针旋转、顺时针旋转。 1、翻转 1.1、水平翻转 使二维数组进行水平翻...

  • 二维数组(matrix)翻转

    以下代码为javascript中二维数组旋转变换的各种实现: 主对角线翻转(左上至右下) 次对角线(右上至左下) ...

  • PHP 工具之数组

    二维数组值 二维数组翻转 二维数组转置

  • 二维数组旋转90度、180度、270度

    图像处理中,很多时候要使用到二维数组的旋转。本质上二维数组的旋转其实就是坐标的变换,即旋转后的坐标(x,y)需要对...

  • 笔记:二维数组,字符串,指针

    #mark- 01-二维数组基本概念 //问题:什么是二维数组?二维数组的格式?二维数组如何存储?二维数组是如何遍...

  • 48、Rotate Image

    90°旋转二维数组 使用第一种解法

  • Day08

    二维数组 二维数组格式 二维数组初始化 二维数组的遍历 二维数组内存存储细节 二维数组与函数注意点: 主要是看函数...

  • 8 ARTS打卡第八周(2019-09-17)

    Algorithm 本周算法:48.旋转图像(未解出)题解思路:使用两次翻转来实现旋转效果,首先第一次翻转,将对应...

  • 剑指offer 1

    1 二维数组中的查找 2 替换字符串 3 从尾到头打印链表 4 重建二叉树 5 两个栈实现队列 6 旋转数组的...

网友评论

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

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