Requisito previo: Punteros en C/C++ Dada una array, escriba un programa para invertirla usando punteros. En este programa hacemos uso del operador *. El operador * (asterisco) denota el valor de la variable. El operador * en el momento de la declaración indica que se trata de un puntero; de lo contrario, indica el valor de la ubicación de memoria señalada por el puntero.
- función inversa: se utiliza para invertir la array a través de punteros
- función de intercambio: se utiliza para intercambiar dos contenidos de memoria
- función de impresión: imprimirá la array
Enfoque: en la función inversa, tomamos dos punteros, uno que apunta al comienzo de la array y otro que apunta al final de la array. El contenido de la ubicación de memoria apuntada por estos dos punteros se intercambia y luego el valor del primer puntero aumenta y el del segundo puntero disminuye. Ejemplos:
Input : array = 2, 4, -6, 5, 8, -1 Output : reverse_array = -1, 8, 5, -6, 4, 2 Input : array = 1, 4, -6, 8, -10, -12 Output : reverse_array = -12, -10, 8, -6, 4, 1
Implementación:
CPP
// CPP program to reverse array // using pointers #include <iostream> using namespace std; // Function to swap two memory contents void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } // Function to reverse the array through pointers void reverse(int array[], int array_size) { // pointer1 pointing at the beginning of the array int *pointer1 = array, // pointer2 pointing at end of the array *pointer2 = array + array_size - 1; while (pointer1 < pointer2) { swap(pointer1, pointer2); pointer1++; pointer2--; } } // Function to print the array void print(int* array, int array_size) { // Length pointing at end of the array int *length = array + array_size, // Position pointing to the beginning of the array *position = array; cout << "Array = "; for (position = array; position < length; position++) cout << *position << " "; } // Driver function int main() { // Array to hold the values int array[] = { 2, 4, -6, 5, 8, -1 }; cout << "Original "; print(array, 6); cout << "Reverse "; reverse(array, 6); print(array, 6); return 0; }
Original Array = 2 4 -6 5 8 -1 Reverse Array = -1 8 5 -6 4 2
Complejidad de tiempo: O(N) , donde N representa el tamaño de la array dada.
Espacio auxiliar: O(1) , no se requiere espacio adicional, por lo que es una constante.