幻燈片算法
回答
的替代版本:
#include <stdio.h>
void swap(int* a, int* b){
int temp = *a;
*a = *b;
*b = temp;
}
int main(){
int i;
int size = 4;
int arr[4] = {1,2,3,4};
for(i = 0; i < size; i++){
printf("%d, ", arr[i]);
}
printf("\n");
for(i = size-1; i > 0; i--){
swap(&arr[i],&arr[i-1]);
}
for(i = 0; i < size; i++){
printf("%d, ", arr[i]);
}
使用模塊化算術可能是最優雅的方法。例如,你可以做這樣的:
int a[size];
int b[size];
for (int n=0; n<size; n++)
b[(n+1)%size] = a[n];
如果你需要的元素轉變爲一個以上的位置,你可以改變b[(n+1)%size]
到b[(n+2)%size]
等。
當天的隨機事實:移動多個地方稱爲桶式移位器 - https://en.wikipedia.org/wiki/Barrel_shifter –
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* Assumed slide is >= 0 and < arr_len. */
void slide_arr(int * arr, int arr_len, int slide)
{
int i;
/* If you are using C99, variable length array would be useful. */
int * tmp_arr = malloc(arr_len * sizeof(int));
memcpy(tmp_arr, arr, arr_len * sizeof(int));
for(i = 0; i < arr_len; i++) {
arr[i] = tmp_arr[(slide + i) % arr_len];
}
free(tmp_arr);
}
int main(void)
{
int i;
int arr[] = {1, 2, 3, 4, 5};
slide_arr(arr, _countof(arr), 2);
for(i = 0; i < _countof(arr); i++) {
printf("%d, ", arr[i]);
}
return EXIT_SUCCESS;
}
鑑於陣列{1, 2, 3, 4, 5}
,slide_arr()
與slide
爲1會給:
{5, 1, 2, 3, 4}
對於slide
爲2時,它會給:
{4, 5, 1, 2, 3}
我在VC寫這++。如果您正在編譯GCC,請使用ARRAY_SIZE
而不是_countof
。
足夠小的列表,你可能會增加一倍於一體的大型陣列的列表,並有一個指針遍歷大陣。我不知道如何在C中執行此操作,但希望C++示例能夠解決這個問題。
int x[] = { 1, 2, 3, 4, 1, 2, 3 };
然後你可以有一個第二指針向上移動陣列像這樣:
int* noshift = x;
int* oneshift = x + 1;
int* twoshift = x + 2;
int* threeshift = x + 3;
第四移位相同在本例中不移位。這將佔用更多的內存。對於n
元素的數組,這將佔用數組中的2*n-1
元素,但時間與內存以及所有爵士音樂相關。
#include <stdio.h>
int main(){
int i;
int len = 5;
int arr = {1,2,3,4,5};
int last = arr[len-1]; // Last element of the array example(5)
for(i = len - 1; i > 0 ; i--)
arr[i] = arr[i-1];
arr[0] = last;
retrurn 0;
}
感謝您發表了一個答案!雖然代碼片段可以回答這個問題,但添加一些附加信息仍然很棒,比如解釋等。 – j0k
- 1. 幻燈片放映幻燈片,其他幻燈片放映幻燈片
- 2. R在幻燈片中生成幻燈片幻燈片
- 3. Javascript幻燈片「空白幻燈片」?
- 4. 放映幻燈片內幻燈片
- 5. 暫停JS幻燈片幻燈片
- 6. c動畫幻燈片幻燈片#
- 7. 幻燈片列表幻燈片列表
- 8. 幻燈片中的幻燈片?
- 9. 幻燈片,幻燈片效果
- 10. 圖像幻燈片的JavaScript幻燈片
- 11. 點擊跳過幻燈片幻燈片
- 12. 將幻燈片更改爲幻燈片
- 13. 照片幻燈片
- 14. 幻燈片UITableViewCell
- 15. pagingScrollView幻燈片
- 16. jQuery幻燈片
- 17. 幻燈片
- 18. HTML5幻燈片
- 19. Widgetkit幻燈片
- 20. jcarousel幻燈片
- 21. 像幻燈片
- 22. jquery幻燈片
- 23. 幻燈片
- 24. scriptaculous幻燈片
- 25. javascript幻燈片
- 26. jQuery幻燈片
- 27. 頁幻燈片
- 28. 幻燈片JSNI?
- 29. jquery幻燈片
- 30. UIImagePicker幻燈片
是否需要使用數組?因爲用鏈表執行此操作會更高效。一個循環鏈表會更好。 – Justin