我想創造某些功能以兩個參數:INT元件,和輸入數組。我想要這個函數將元素參數放在數組中的第一個位置,通過單個索引放大數組,最後將輸入數組放在推送元素之後。最優陣列推
爲了說明這一點,讓我們說我的輸入數組爲{1,2,3},並作爲參數傳遞元件是5輸出應該{5,1,2,3}。
我怎麼能這樣做最佳?
我想出了這個功能:
void push(int el, int **arr)
{
int *arr_temp = *arr;
*arr = NULL;
*arr = (int*) malloc(sizeof(int)*(n - 1));
(*arr)[0] = el;
for(int i = 0; i < (int)n - 1; i++)
{
(*arr)[i + 1] = arr_temp[i];
}
}
它的工作原理,但遠,這不是我寫的最快的功能,它會減慢整個程序。有一個更好的方法嗎?
我的猜測是做了類似(*arr)[1] = arr_temp
的事情,但沒有奏效,我不確定C是否有可能做這樣的事情。
對於這種操作,數組並不是一個理想的數據結構。 – 2013-04-08 21:52:30
嘗試'realloc'放大數組而不復制每個元素(如果可能)。 – Tushar 2013-04-08 21:52:38
從技術上講,這不是「推」操作,而是「不移位」操作。如果你發現自己比一個真正的「推」操作更頻繁(將一些東西附加到數組的尾部),那麼你可能需要翻轉數組,以便實際*將*追加到尾部。如果混合推/拉/移/移動很多,但很少訪問數組的中間,那麼雙向鏈表可能會更好。 – cdhowie 2013-04-08 21:52:46