C++程式:在陣列開頭新增元素


陣列和資料結構使得能夠在多個記憶體位置儲存同質(**相同**)資料成為可能。使用陣列的主要好處是我們可以使用索引引數從任何我們想要的地方檢索它們。由於資料必須依次插入和刪除,因此這種資料結構成為線性的。我們只需要在方括號內放置該元素的索引或位置號即可從陣列中檢索它。在本文中,我們將使用陣列 A 和另一個元素 e。我們將在 C++ 中將 e 插入到 A 的起始位置。

透過示例理解概念

Given array A = [10, 14, 65, 85, 96, 12, 35, 74, 69]
After inserting 23 at the end, the array will look like this:
[23, 10, 14, 65, 85, 96, 12, 35, 74, 69]

在上面的示例中,我們有一個包含九個元素的陣列 A。我們將另一個元素 23 插入到陣列 A 的開頭。結果陣列包含所有元素,以及開頭位置的 23。要在開頭插入元素,我們必須將所有元素向右移動一個位置,然後第一個槽將為空,我們將新元素放在該位置。讓我們看看演算法以獲得清晰的理解。

演算法

  • 獲取陣列 A 和元素 e

  • 如果陣列 A 有足夠的空間插入元素 e,則

    • 對於 i 從範圍 n - 1 到 0,執行

      • A[ i + 1 ] = A[ i ]

    • 結束迴圈

    • A[ 0 ] = e

    • 將 n 增加 1

  • 結束 if

  • 返回 A

示例

#include <iostream>
# define Z 50

using namespace std;

void displayArr(int arr[], int n){
   for( int i = 0; i < n; i++ ){
      cout << arr[ i ] << ", ";
   }
   cout << endl;
}
void insertAtBeginning( int A[], int &n, int e ){
   if( n + 1 < Z ) {
      for( int i = n - 1; i >= 0; i-- ) {
         A[ i + 1 ] = A[ i ];
      }
      A[ 0 ] = e;
      n = n + 1;
   } 
}

int main() {
   int A[ Z ] = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};
   int n = 12;
   
   cout << "Array before insertion: ";
   displayArr( A, n );
   
   cout << "Inserting 58 at the beginning:" << endl;
   insertAtBeginning( A, n, 58 );
   
   cout << "Array after insertion: ";
   displayArr( A, n );
   
   cout << "Inserting 225 at the beginning:" << endl;
   insertAtBeginning( A, n, 225 );
   
   cout << "Array after insertion: ";
   displayArr( A, n );
}

輸出

Array before insertion: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Inserting 58 at the beginning:
Array after insertion: 58, 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Inserting 225 at the beginning:
Array after insertion: 225, 58, 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14,

使用向量在前面插入元素

向量是 C++ STL 附帶的動態資料結構。我們也可以在向量中獲得類似於陣列的功能。但在向量中,我們只能在末尾或後面插入。沒有直接的方法可以在開頭插入。但是,我們可以像以前一樣,將元素移動一個位置,然後在新元素插入到開頭。或者,我們可以使用新元素建立一個另一個單元素向量,然後將它們連線起來。因此,結果向量將包含所有以前的元素以及開頭的新元素。讓我們看看演算法和 C++ 實現。

演算法

  • 獲取陣列 A 和元素 e

  • 建立一個空向量 B

  • 將 e 插入 B

  • A := 將 B 與 A 連線 (先 B 後 A)

  • 返回 A

示例

#include <iostream>
#include <vector>
# define Z 50

using namespace std;

void displayArr( vector<int> v ){
   for( int i = 0; i < v.size() ; i++ ){
      cout << v[ i ] << ", ";
   }
   cout << endl;
}

vector<int> insertAtBeginning( vector<int> A, int e ){
   vector<int> B( 1 );
   B[ 0 ] = e;
   B.insert( B.end(), A.begin(), A.end() );
   return B;
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};  
   cout << "Array before insertion: ";
   displayArr( A );
   
   cout << "Inserting 58 at the beginning:" << endl;
   A = insertAtBeginning( A, 58 );
   
   cout << "Array after insertion: ";
   displayArr( A );
   
   cout << "Inserting 225 at the beginning:" << endl;
   A = insertAtBeginning( A, 225 );
   
   cout << "Array after insertion: ";
   displayArr( A );
}

輸出

Array before insertion: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Inserting 58 at the beginning:
Array after insertion: 58, 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Inserting 225 at the beginning:
Array after insertion: 225, 58, 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14,

結論

在本文中,我們已經瞭解瞭如何在陣列的開頭插入元素。我們在這裡討論了兩種不同的解決方案。在第一個解決方案中使用了靜態 C++ 陣列,在第二個解決方案中使用了向量。向量沒有直接在開頭插入元素的方法。我們可以使用 push_back() 方法直接在末尾插入。為此,我們使用了一個技巧,我們建立了一個大小為 1 的陣列,然後將新元素插入其中。之後將其與給定陣列連線起來。我們可以使用列表來實現相同的效果。但是 C++ 列表具有 push_front() 方法,可以直接在前面插入元素。但是列表不是陣列,它們是連結串列。

更新於:2022年12月13日

9K+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.