Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ตัวอย่าง Dynamic Memory Allocation: หา Max/Min ใน Array


โจทย์

หาค่าสูงสุด (Max) และต่ำสุด (Min) จาก Array โดยใช้ Dynamic Memory Allocation

โปรแกรม

#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // INT_MIN, INT_MAX

int main() {
    int *p, n, i;
    int max = INT_MIN; // -2147483648
    int min = INT_MAX; //  2147483647
    
    printf("Enter size: ");
    scanf("%d", &n);
    
    // จอง Memory
    p = (int *)malloc(n * sizeof(int));
    if (p == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }
    
    printf("Enter %d elements:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", p + i);
        
        // หา Max/Min พร้อมกัน
        if (*(p + i) > max) max = *(p + i);
        if (*(p + i) < min) min = *(p + i);
    }
    
    printf("Maximum = %d\n", max);
    printf("Minimum = %d\n", min);
    
    free(p);
    return 0;
}

ผลลัพธ์ตัวอย่าง:


Enter size: 5
Enter 5 elements:
12 45 3 89 22
Maximum = 89
Minimum = 3

การปรับปรุงจากโค้ดต้นฉบับ

  1. เพิ่ม <limits.h> ใช้ INT_MIN/INT_MAX แทน Magic Numbers
  2. เพิ่ม Error Checking หลัง malloc()
  3. คำนวณ Max/Min ใน Loop เดียว (Single Pass)
  4. ใช้ free(p) ปล่อย Memory

ขยายความ: หา Index ของ Max/Min


int max_idx = 0, min_idx = 0;
for (i = 1; i < n; i++) {
    if (*(p + i) > *(p + max_idx)) max_idx = i;
    if (*(p + i) < *(p + min_idx)) min_idx = i;
}
printf("Max at index %d, Min at index %d\n", max_idx, min_idx);

การใช้ realloc() ขยาย Array


// เพิ่มขนาด Array จาก n เป็น n+5
int *temp = realloc(p, (n + 5) * sizeof(int));
if (temp != NULL) {
    p = temp;
    n += 5;
    // รับข้อมูลเพิ่ม...
}