C語(yǔ)言實(shí)現(xiàn)數(shù)組移位、前移、后移與整體移動(dòng)實(shí)例代碼
提示:本文講解有關(guān)數(shù)組后移前移的操作,以及具體的題目應(yīng)用.
一、數(shù)組前移
數(shù)組前移一個(gè)元素分為三部,假設(shè)為數(shù)組為1,2,3,4,5,6,7,8,9
,移動(dòng)后的數(shù)應(yīng)該為2,3,4,5,6,7,8,9,1
- 將要被因數(shù)組移動(dòng)干掉的元素,這里就是1存放在臨時(shí)變量里
- 將數(shù)組整體向前移動(dòng),其實(shí)應(yīng)該是讓后一個(gè)元素給到前面一個(gè)
- 在將臨時(shí)變量中存放的元素,也就是1,放在數(shù)組的末尾即可
注意,這里整體向前移動(dòng),需要正序遍歷數(shù)組,因?yàn)槿绻悄嫘虮闅v,那么第一次遍歷結(jié)束,后面的8就沒(méi)了,直接變成了9,依次類(lèi)推,每遍歷一次,就多一個(gè)9.
因?yàn)槊看魏笠粋€(gè)都要給到前一個(gè),因此前一個(gè)的值會(huì)被干掉,如果不拿一個(gè)臨時(shí)變量,就找不到那個(gè)數(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; }
那么就有人要問(wèn)了,我非要試試逆序,為什么會(huì)不行呢?
錯(cuò)誤的逆序法.
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; }
這樣,雖然也是后一個(gè)給前一個(gè)值,但是會(huì)將前面的值全部干掉
二、數(shù)組后移
有了前面前移的鋪墊,那么后移也是一樣的.
數(shù)組后移一個(gè)元素也是分為三部,假設(shè)為數(shù)組為1,2,3,4,5,6,7,8,9
,移動(dòng)后的數(shù)應(yīng)該為9,1,2,3,4,5,6,7,8
- 將要被因數(shù)組移動(dòng)干掉的元素,這里就是9存放在臨時(shí)變量里
- 將數(shù)組整體向后移動(dòng),其實(shí)應(yīng)該是讓前一個(gè)元素給到后面一個(gè)
- 在將臨時(shí)變量中存放的元素,也就是9,放在數(shù)組的開(kāi)頭即可
代碼如下
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]; } }
錯(cuò)誤的正序法.
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; }
同理,向后移動(dòng)如果從前向后遍歷,也就是正序遍歷,那么會(huì)將所有數(shù)覆蓋,在這里,就是除了第一個(gè)全都是1
二、數(shù)組整體移動(dòng)
題目:有n個(gè)整數(shù),使前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成最前面m個(gè)數(shù)
有n個(gè)整數(shù),使前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成最前面m個(gè)數(shù) 例如有10個(gè)數(shù)1,2,3,4,5,6,7,8,9,10,向后移動(dòng)5個(gè)位置,最后5個(gè)數(shù)變成最前面的,數(shù)據(jù)變?yōu)?,7,8,9,10,1,2,3,4,5
想想思路,既然要把m個(gè)數(shù)移動(dòng)到前面,并將前面的數(shù)組往后移動(dòng),那么就需要拿一個(gè)變量保存你當(dāng)前要移動(dòng)的一個(gè)數(shù),不然數(shù)組后移會(huì)將它干掉.接下來(lái)將數(shù)移動(dòng)到數(shù)組開(kāi)頭,其他幾個(gè)數(shù)一樣,依此類(lèi)推.
- 將要移動(dòng)的數(shù)保存在臨時(shí)變量中
- 將要移動(dòng)的數(shù)前面的所有數(shù)全部向后移動(dòng)
- 將存放移動(dòng)的數(shù)的臨時(shí)變量賦給數(shù)組的前面
- 進(jìn)行下一次移動(dòng)
但很明顯,按照上圖的邏輯,并不是這么簡(jiǎn)單的,你需要將第一個(gè)數(shù)移動(dòng)到數(shù)組開(kāi)頭,將它后面的一個(gè)數(shù)移動(dòng)到第一個(gè)數(shù)的后面.
也就是說(shuō),你要找到要移動(dòng)的數(shù)的各個(gè)位置,假設(shè)有10個(gè)數(shù),要移動(dòng)5個(gè)位置,不難發(fā)現(xiàn),每一次移動(dòng)的位置就是第五個(gè),下標(biāo)為4,第六個(gè),下標(biāo)為5,所以拿一個(gè)變量累加就可以了,而找好之后,就是將從那個(gè)移動(dòng)的位置為結(jié)束,從移動(dòng)好的位置開(kāi)始,元素向后移動(dòng).
1.取出要移動(dòng)的在moving_pos下標(biāo)的數(shù)放入temp中
2.將數(shù)組往后移動(dòng)
3.將temp中的值放入已經(jīng)固定好的不用后移的位置
接下來(lái)循環(huán)開(kāi)始,num_moving重新賦值為后面一個(gè),temp重新賦值為后面一個(gè),num_fiexd向后指
//4.有n個(gè)整數(shù),使前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成最前面m個(gè)數(shù) //例如有10個(gè)數(shù)1,2,3,4,5,6,7,8,9,10,向后移動(dòng)5個(gè)位置,最后5個(gè)數(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;//保存當(dāng)前要移動(dòng)到前面的數(shù),moving_pos+i指的是第幾個(gè)數(shù)的下標(biāo) //將前面的數(shù)組整個(gè)向后移動(dòng) for (int j = moving_pos + num_fixed; j > num_fixed; j--) { *(cur + j) = *(cur + j - 1); } //將臨時(shí)值放入固定點(diǎn)存好 *(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]); } }
總結(jié)
提示:這里對(duì)文章進(jìn)行總結(jié):
例如:以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。
到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)數(shù)組移位、前移、后移與整體移動(dòng)的文章就介紹到這了,更多相關(guān)C語(yǔ)言數(shù)組后移前移內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++ Crypto密碼庫(kù)調(diào)用的實(shí)現(xiàn)方法
Crypto 庫(kù)是C/C++的加密算法庫(kù),這個(gè)加密庫(kù)很流行,基本上涵蓋了市面上的各類(lèi)加密解密算法,感興趣的可以參考一下2021-06-06vc6.0中c語(yǔ)言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器)
這篇文章主要介紹了vc6.0中c語(yǔ)言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器),需要的朋友可以參考下2014-04-04關(guān)于C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹
大家好,本篇文章主要講的是關(guān)于C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01詳解C語(yǔ)言通過(guò)遞歸與非遞歸實(shí)現(xiàn)蛇形矩陣
蛇形矩陣(Snake matrix)是矩陣的一種,常被應(yīng)用在編程題目與數(shù)學(xué)數(shù)列中,需要提取每條斜線里最小的數(shù)字,本篇文章將會(huì)通過(guò)遞歸和非遞歸來(lái)分別實(shí)現(xiàn)蛇形矩陣2022-02-02C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例
這篇文章主要為大家介紹了C語(yǔ)言編程基礎(chǔ)char類(lèi)型轉(zhuǎn)換示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度和空間復(fù)雜度
算法在編寫(xiě)成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來(lái)衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度,感興趣的同學(xué)可以參考閱讀2023-04-04