引言
在編程中,數據扭轉是一個罕見的須要,它可能在差其余場景下進步順序的效力跟機能。C言語作為一種高效的編程言語,供給了多種方法來實現數據的扭轉。本文將具體介紹C言語中實現數據扭轉的技能,包含數組、字符串跟二叉樹等數據構造的扭轉方法。
數組扭轉
數組扭轉是指將數組中的元素按照一定的規矩停止挪動,以達到扭轉的目標。以下是多少種罕見的數組扭轉方法:
1. 逆時針扭轉90度
以下是一個C言語實現逆時針扭轉90度數組的示例代碼:
#include <stdio.h>
void rotate90DegreesCounterClockwise(int a[][4], int n) {
int i, j, temp;
for (i = 0; i < n; i++) {
for (j = i; j < n - i; j++) {
temp = a[j][i];
a[j][i] = a[i][n - 1 - j];
a[i][n - 1 - j] = a[n - 1 - j][n - 1 - i];
a[n - 1 - j][n - 1 - i] = a[n - 1 - i][j];
a[n - 1 - i][j] = temp;
}
}
}
int main() {
int n = 4;
int a[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
rotate90DegreesCounterClockwise(a, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
2. 右旋k次
以下是一個C言語實現數組右旋k次的示例代碼:
void rotateRight(int a[], int n, int k) {
int temp[n];
for (int i = 0; i < n; i++) {
temp[(i + k) % n] = a[i];
}
for (int i = 0; i < n; i++) {
a[i] = temp[i];
}
}
字符串扭轉
字符串扭轉是指將字符串中的字符按照一定的規矩停止挪動,以達到扭轉的目標。以下是兩種罕見的字符串扭轉方法:
1. 左旋k個字符
以下是一個C言語實現字符串左旋k個字符的示例代碼:
void leftRotate(char *str, int k) {
int len = strlen(str);
k = k % len;
char temp[k];
for (int i = 0; i < k; i++) {
temp[i] = str[i];
}
for (int i = 0; i < len - k; i++) {
str[i] = str[i + k];
}
for (int i = 0; i < k; i++) {
str[len - k + i] = temp[i];
}
}
2. 右旋k個字符
以下是一個C言語實現字符串右旋k個字符的示例代碼:
void rightRotate(char *str, int k) {
int len = strlen(str);
k = k % len;
char temp[k];
for (int i = 0; i < k; i++) {
temp[i] = str[len - k + i];
}
for (int i = len - 1; i >= k; i--) {
str[i] = str[i - k];
}
for (int i = 0; i < k; i++) {
str[i] = temp[i];
}
}
二叉樹扭轉
二叉樹扭轉是用於均衡二叉查抄樹的一種操縱,以下是兩種罕見的二叉樹扭轉操縱:
1. 左旋
以下是一個C言語實現左旋的示例代碼:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* leftRotate(struct TreeNode* root) {
struct TreeNode* newRoot = root->right;
root->right = newRoot->left;
newRoot->left = root;
return newRoot;
}
2. 右旋
以下是一個C言語實現右旋的示例代碼:
struct TreeNode* rightRotate(struct TreeNode* root) {
struct TreeNode* newRoot = root->left;
root->left = newRoot->right;
newRoot->right = root;
return newRoot;
}
總結
本文介紹了C言語中實現數據扭轉的技能,包含數組、字符串跟二叉樹等數據構造的扭轉方法。控制這些技能可能幫助你更好地懂得跟利用C言語,進步編程效力。