Добавить n элементов из массива xs в конец массива array - C (СИ)

Узнай цену своей работы

Формулировка задачи:

void appendElements (Array, *array, int *xs, int n);
Добавляет n элементов из массива xs в конец массива array.
Пример. Исходный массив:
1 2 3 4 5
Вызов:
int xs[] = {6, 7, 8, 9};
int n = sizeof(xs) / sizeof(*xs);
appendElements(array, xs, n);
Результат:
1 2 3 4 5 6 7 8 9

Решение задачи: «Добавить n элементов из массива xs в конец массива array»

textual
Листинг программы
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct Array {
    int *data;
    int n;
} Array;
 
void* mymalloc (size_t size);
void* myrealloc (void *ptr, size_t size);
 
Array* newArray (int n);
Array* copyArray (const Array *array);
void destroyArray (Array *array);
 
 
Array* readArray (const char *str);
void pprintArray (const Array *array, const char *str);
void pprintLineArray (const Array *array);
void prependElements (Array *array, int *xs, int n);
 
 
void* myrealloc (void *ptr, size_t size) {
void *res = realloc(ptr, size); 
    if (res == NULL && size != 0) { 
        fprintf(stderr, "myrealloc: unable to allocate %zd bytes\n", size); 
        exit(EXIT_FAILURE);
    }
    return res; 
}
 
void* mymalloc (size_t size) { 
    void *res = malloc(size); 
    if (res == NULL) { 
        fprintf(stderr, "mymalloc: unable to allocate %zd bytes\n ", size); 
        exit(EXIT_FAILURE); 
    } 
    return res; 
}
 
Array* newArray (int n){
    Array* array = (Array*)mymalloc(sizeof(*array));
    array->n = n;
    array->data = (int*)mymalloc(sizeof(*array->data)*n);
    return array;
}
 
Array* copyArray (const Array *array) {
    Array* arraycopy=newArray(array->n);
    int* data = array->data;
    int* datacopy = arraycopy->data;
    int i,len=array->n;
    
    for(i=0;i<len;i++) datacopy[i] = data[i];
    return arraycopy;
}
 
void destroyArray (Array *array) { 
    free(array->data); 
    free(array); 
}
 
Array* readArray (const char *str) {
    Array *result = NULL;
    int n;
    printf("Enter size of %s: ", str);
    if (scanf("%d", &n) != 1 || n < 0) {
        fprintf(stderr, "readArray: input error reading %s\n", str);
        destroyArray(result);
        return NULL;                
    }
    result = newArray(n);
    int *data = result->data;
    for (int i = 0; i < n; i++) {
        if (scanf("%d", data + i) != 1) {
            fprintf(stderr, "readArray: input error reading %s\n", str);
            destroyArray(result);
            return NULL;                  
        }
    }
    return result;
}
 
void pprintArray (const Array *array, const char *str) {
    const int *data = array->data;
    int n = array->n;
    for (int i = 0; i < n; i++) {
        printf("%s[%d] = %d\n", str, i, data[i]);
    }
}
 
void pprintLineArray (const Array *array) {
    const int *data = array->data;
    int n = array->n;
    if (n > 0) {
        printf("%d", data[0]);
    }
    for (int i = 1; i < n; i++) {
        printf(" %d", data[i]);
    }
    if (n > 0) {
        printf("\n");
    }
}
 
 
void appendElements (Array *array, int *xs, int n) {
 
    int i;
    array->data=(int*)myrealloc(array->data,sizeof(int)*(array->n+n));
    array->n+=n;
    int l = array->n;
 
    for(i=l+1;i<=n;i++) {
        
        array->data[i]=array->data[i+n];
    }
    
    for(i=0;i<n;i++) {
        
        array->data[i]=xs[i];
    }
}
 
 
int main () {
    Array *array = readArray("array");
    if (array == NULL) {
        printf("I don't want to play with you anymore!!!\n");
        exit(EXIT_FAILURE);
    }
    pprintLineArray(array);
    int app_E = 0;
    printf("Enter size of app: ");
    if (scanf("%d", &app_E) != 1 || app_E < 0) {
        fprintf(stderr, "readArray: input error reading app_E\n");
        exit(EXIT_FAILURE);
    }
    int app[app_E];
    for (int i = 0; i<app_E; i++)   app[i] = (i+1);
    
    appendElements(array,app,app_E);
    pprintLineArray(array);
    destroyArray(array);
}

Объяснение кода листинга программы

В этом коде реализованы основные операции со строками в языке C:

  1. Создание нового массива с помощью функции newArray().
  2. Чтение массива из стандартного ввода с помощью функции readArray().
  3. Вывод содержимого массива с помощью функции pprintArray().
  4. Добавление элементов в конец массива с помощью функции appendElements().
  5. Вывод измененного массива с помощью функции pprintLineArray().
  6. Уничтожение массива с помощью функции destroyArray(). Код также включает функции mymalloc() и myrealloc(), которые являются безопасными аналогами стандартных функций malloc() и realloc(), и обеспечивают обработку ошибок. Синтаксис кода соответствует стандарту C99, и он совместим с компиляторами, поддерживающими этот стандарт.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы