C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動實例代碼
提示:本文講解有關數(shù)組后移前移的操作,以及具體的題目應用.
一、數(shù)組前移
數(shù)組前移一個元素分為三部,假設為數(shù)組為1,2,3,4,5,6,7,8,9,移動后的數(shù)應該為2,3,4,5,6,7,8,9,1
- 將要被因數(shù)組移動干掉的元素,這里就是1存放在臨時變量里
- 將數(shù)組整體向前移動,其實應該是讓后一個元素給到前面一個
- 在將臨時變量中存放的元素,也就是1,放在數(shù)組的末尾即可
注意,這里整體向前移動,需要正序遍歷數(shù)組,因為如果是逆序遍歷,那么第一次遍歷結束,后面的8就沒了,直接變成了9,依次類推,每遍歷一次,就多一個9.


因為每次后一個都要給到前一個,因此前一個的值會被干掉,如果不拿一個臨時變量,就找不到那個數(shù)了
代碼如下
void move_Front(int arr[],int length)
{
int temp = arr[0],i;
for (i = 0; i < length; i++)
{
arr[i] = arr[i + 1];
}
arr[length-1]=temp;
}那么就有人要問了,我非要試試逆序,為什么會不行呢?
錯誤的逆序法.
void move_Front(int arr[],int length)
{
int temp = arr[0],i;
for (i = length - 1; i >= 1; i--)
{
arr[i-1] = arr[i];
}
arr[length-1]=temp;
}
這樣,雖然也是后一個給前一個值,但是會將前面的值全部干掉

二、數(shù)組后移
有了前面前移的鋪墊,那么后移也是一樣的.
數(shù)組后移一個元素也是分為三部,假設為數(shù)組為1,2,3,4,5,6,7,8,9,移動后的數(shù)應該為9,1,2,3,4,5,6,7,8
- 將要被因數(shù)組移動干掉的元素,這里就是9存放在臨時變量里
- 將數(shù)組整體向后移動,其實應該是讓前一個元素給到后面一個
- 在將臨時變量中存放的元素,也就是9,放在數(shù)組的開頭即可
代碼如下
void move_Behind(int arr[], int length)
{
int temp = arr[length-1], i;
for (i = length - 1; i >= 1; i--)
{
arr[i] = arr[i - 1];
}
}錯誤的正序法.
void move_Behind(int arr[], int length)
{
int temp = arr[length-1], i;
for (i = 0; i < length-1; i++)
{
arr[i+1] = arr[i];
}
arr[0] = temp;
}
同理,向后移動如果從前向后遍歷,也就是正序遍歷,那么會將所有數(shù)覆蓋,在這里,就是除了第一個全都是1

二、數(shù)組整體移動
題目:有n個整數(shù),使前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面m個數(shù)
有n個整數(shù),使前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面m個數(shù) 例如有10個數(shù)1,2,3,4,5,6,7,8,9,10,向后移動5個位置,最后5個數(shù)變成最前面的,數(shù)據(jù)變?yōu)?,7,8,9,10,1,2,3,4,5

想想思路,既然要把m個數(shù)移動到前面,并將前面的數(shù)組往后移動,那么就需要拿一個變量保存你當前要移動的一個數(shù),不然數(shù)組后移會將它干掉.接下來將數(shù)移動到數(shù)組開頭,其他幾個數(shù)一樣,依此類推.
- 將要移動的數(shù)保存在臨時變量中
- 將要移動的數(shù)前面的所有數(shù)全部向后移動
- 將存放移動的數(shù)的臨時變量賦給數(shù)組的前面
- 進行下一次移動
但很明顯,按照上圖的邏輯,并不是這么簡單的,你需要將第一個數(shù)移動到數(shù)組開頭,將它后面的一個數(shù)移動到第一個數(shù)的后面.
也就是說,你要找到要移動的數(shù)的各個位置,假設有10個數(shù),要移動5個位置,不難發(fā)現(xiàn),每一次移動的位置就是第五個,下標為4,第六個,下標為5,所以拿一個變量累加就可以了,而找好之后,就是將從那個移動的位置為結束,從移動好的位置開始,元素向后移動.
1.取出要移動的在moving_pos下標的數(shù)放入temp中

2.將數(shù)組往后移動

3.將temp中的值放入已經(jīng)固定好的不用后移的位置
接下來循環(huán)開始,num_moving重新賦值為后面一個,temp重新賦值為后面一個,num_fiexd向后指



//4.有n個整數(shù),使前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面m個數(shù)
//例如有10個數(shù)1,2,3,4,5,6,7,8,9,10,向后移動5個位置,最后5個數(shù)變成最前面的,數(shù)據(jù)變?yōu)?,7,8,9,10,1,2,3,4,5
void move_array(int arr[],int len,int moving_pos)
{
int* cur = arr;
int* num_moving=NULL;
int temp = 0;
for (int num_fixed = 0; num_fixed < moving_pos; num_fixed++)
{
num_moving = *(cur + moving_pos + num_fixed);
temp = num_moving;//保存當前要移動到前面的數(shù),moving_pos+i指的是第幾個數(shù)的下標
//將前面的數(shù)組整個向后移動
for (int j = moving_pos + num_fixed; j > num_fixed; j--)
{
*(cur + j) = *(cur + j - 1);
}
//將臨時值放入固定點存好
*(cur + num_fixed) = temp;
}
}
void main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int moving_pos=0;
scanf_s("%d", &moving_pos);
printf("origin:\n");
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr[i]);
}
move_array(arr, 10, moving_pos);
printf("\nfinal:\n");
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr[i]);
}
}
總結
提示:這里對文章進行總結:
例如:以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。
到此這篇關于C語言實現(xiàn)數(shù)組移位、前移、后移與整體移動的文章就介紹到這了,更多相關C語言數(shù)組后移前移內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)LeetCode(189.旋轉數(shù)組)
這篇文章主要介紹了C++實現(xiàn)LeetCode(189.旋轉數(shù)組),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
C++異步操作future和aysnc與function和bind
這篇文章主要介紹了C++異步操作future和aysnc與function和bind,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
c++中#include <>與#include""的區(qū)別詳細解析
<>先去系統(tǒng)目錄中找頭文件,如果沒有在到當前目錄下找。所以像標準的頭文件 stdio.h、stdlib.h等用這個方法2013-10-10

