亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現數組移位、前移、后移與整體移動

發布時間:2023-03-30 11:37:31 來源:億速云 閱讀:347 作者:iii 欄目:開發技術

這篇文章主要介紹“C語言如何實現數組移位、前移、后移與整體移動”,在日常操作中,相信很多人在C語言如何實現數組移位、前移、后移與整體移動問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言如何實現數組移位、前移、后移與整體移動”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、數組前移

數組前移一個元素分為三部,假設為數組為1,2,3,4,5,6,7,8,9,移動后的數應該為2,3,4,5,6,7,8,9,1

  • 將要被因數組移動干掉的元素,這里就是1存放在臨時變量里

  • 將數組整體向前移動,其實應該是讓后一個元素給到前面一個

  • 在將臨時變量中存放的元素,也就是1,放在數組的末尾即可

注意,這里整體向前移動,需要正序遍歷數組,因為如果是逆序遍歷,那么第一次遍歷結束,后面的8就沒了,直接變成了9,依次類推,每遍歷一次,就多一個9.

C語言如何實現數組移位、前移、后移與整體移動

C語言如何實現數組移位、前移、后移與整體移動

因為每次后一個都要給到前一個,因此前一個的值會被干掉,如果不拿一個臨時變量,就找不到那個數了

代碼如下

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;
}

這樣,雖然也是后一個給前一個值,但是會將前面的值全部干掉

C語言如何實現數組移位、前移、后移與整體移動

二、數組后移

有了前面前移的鋪墊,那么后移也是一樣的.

數組后移一個元素也是分為三部,假設為數組為1,2,3,4,5,6,7,8,9,移動后的數應該為9,1,2,3,4,5,6,7,8

  • 將要被因數組移動干掉的元素,這里就是9存放在臨時變量里

  • 將數組整體向后移動,其實應該是讓前一個元素給到后面一個

  • 在將臨時變量中存放的元素,也就是9,放在數組的開頭即可

代碼如下

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;
}

同理,向后移動如果從前向后遍歷,也就是正序遍歷,那么會將所有數覆蓋,在這里,就是除了第一個全都是1

C語言如何實現數組移位、前移、后移與整體移動

二、數組整體移動

題目:有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數

有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數 例如有10個數1,2,3,4,5,6,7,8,9,10,向后移動5個位置,最后5個數變成最前面的,數據變為6,7,8,9,10,1,2,3,4,5

C語言如何實現數組移位、前移、后移與整體移動

想想思路,既然要把m個數移動到前面,并將前面的數組往后移動,那么就需要拿一個變量保存你當前要移動的一個數,不然數組后移會將它干掉.接下來將數移動到數組開頭,其他幾個數一樣,依此類推.

  • 將要移動的數保存在臨時變量中

  • 將要移動的數前面的所有數全部向后移動

  • 將存放移動的數的臨時變量賦給數組的前面

  • 進行下一次移動

但很明顯,按照上圖的邏輯,并不是這么簡單的,你需要將第一個數移動到數組開頭,將它后面的一個數移動到第一個數的后面.
也就是說,你要找到要移動的數的各個位置,假設有10個數,要移動5個位置,不難發現,每一次移動的位置就是第五個,下標為4,第六個,下標為5,所以拿一個變量累加就可以了,而找好之后,就是將從那個移動的位置為結束,從移動好的位置開始,元素向后移動.

1.取出要移動的在moving_pos下標的數放入temp中

C語言如何實現數組移位、前移、后移與整體移動

2.將數組往后移動

C語言如何實現數組移位、前移、后移與整體移動

3.將temp中的值放入已經固定好的不用后移的位置

接下來循環開始,num_moving重新賦值為后面一個,temp重新賦值為后面一個,num_fiexd向后指

C語言如何實現數組移位、前移、后移與整體移動

C語言如何實現數組移位、前移、后移與整體移動

C語言如何實現數組移位、前移、后移與整體移動

//4.有n個整數,使前面各數順序向后移m個位置,最后m個數變成最前面m個數
//例如有10個數1,2,3,4,5,6,7,8,9,10,向后移動5個位置,最后5個數變成最前面的,數據變為6,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;//保存當前要移動到前面的數,moving_pos+i指的是第幾個數的下標
		//將前面的數組整個向后移動
		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]);
	}
}

到此,關于“C語言如何實現數組移位、前移、后移與整體移動”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣汉县| 黎川县| 双牌县| 灵石县| 孙吴县| 寿光市| 虎林市| 莫力| 巴林右旗| 宜宾县| 桃源县| 石河子市| 宁陵县| 南华县| 平邑县| 那曲县| 铁岭市| 和政县| 辽阳市| 菏泽市| 尉氏县| 驻马店市| 育儿| 沙洋县| 桂阳县| 汕尾市| 大新县| 微山县| 乌拉特中旗| 巩义市| 太仆寺旗| 赞皇县| 普安县| 临湘市| 中阳县| 永清县| 清镇市| 安达市| 阜康市| 扶沟县| 楚雄市|