1. 程式人生 > 實用技巧 >資料結構1--順序表練習

資料結構1--順序表練習

編寫一個演算法實現找出n個整數型別資料的順序表中的最大數和最小數,然後將最大數放到最小數後面。如:原順序表為:12,6,4,20,14,7,9,36,10,15,調整後順序表為:12,6,4,36,20,14,7,9, 10,15。

計算機內部用一組地址連續的儲存單元來依次儲存線性表中的資料元素,這種線性表叫順序表。

常見的順序表有一維陣列,所以通常使用陣列來描述線性表的順序儲存結構,即順序表。

順序表可以這樣描述:

#define maxsize 100  //分配最大空間大小為100
elemtype A[maxsize];  //“elemtype”代表資料型別,本題為int
int n;         //線性表長度

因為需要對元素中最大值和最小值進行操作,所以需要對它們分別定義並初始化為0;

int max=0,min=0;  //陣列中元素最大值和最小值下標定義

求最值程式碼:

for (int i = 0; i < n; i++)
    {
        if (a[i] > a[max])
            max = i;
        if (a[i] < a[min])
            min = i;
    }
​

將最大值插入到最小值下一位,我所使用的方法是將最大值與最小值方向的相鄰元素不斷交換位置,直到運動到最小值下一位。流程如下:

需要注意的是,最大值位於最小值右邊與最大值位於最小值左邊需要執行的迴圈次數不同,所以編寫程式碼時需要考慮到兩種情況:

if (max > min) //最大值位於最小值右邊
    {
        for (int i = max; i > min + 1; i--)
        {
            t = a[i]; a[i] = a[i - 1]; a[i - 1] = t;
        }
    }
    else    //最大值位於最小值左邊
    {
        for (int i = max; i < min; i++)
        {
            t = a[i]; a[i] = a[i + 1]; a[i + 1] = t;
        }
    }
​