Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Элемент двусвязного списка содержит массив целых фиксированной размерности.
- Функция создает структуру данных, читает из входного массива значения, пока
- массив не кончится. В каждом элементе списка запоминается текущее количество
- заполненных элементов массива.
- Требования ко всем задачам:
- 1. Задачу реализовать в виде функции, получающей все данные через параметры.
- 2. В main создать две статические структуры данных, вызвать функцию 2 раза и вывести 2 результата. Никакие входные данные не вводятся, программа запускается «от одного клика». Структуру данных можно создавать динамически с помощью функции добавления элемента и ее многократного вызова.
- 3. Если функция создает структуру данных, то необходима функция трассировки - вывод значений, хранимых в структуре данных, и необходимых данных о текущей конфигурации (уровень вершины дерева, номер элемента списка и т.п.)
- Замечания по выполняемым операциям.
- Объединение - результат содержит элементы из двух исходных структур данных (СД), элемент, присутствующий в обеих СД, включается в одном экземпляре.
- Пересечение - результат содержит элементы, одновременно присутствующие в обеих структурах данных.
- Разность - результат содержит элементы из первой СД, которые отсутствуют во второй.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define ARRAY_SIZE 4
- typedef struct Node {
- int array[ARRAY_SIZE];
- int filled;
- struct Node *prev;
- struct Node *next;
- } Node;
- Node* createNode() {
- Node *newNode = (Node*)malloc(sizeof(Node));
- newNode->filled = 0;
- newNode->prev = NULL;
- newNode->next = NULL;
- return newNode;
- }
- Node* createList(int *inputArray, int size) {
- Node *head = NULL, *tail = NULL;
- int i = 0;
- while (i < size) {
- Node *newNode = createNode();
- while (i < size && newNode->filled < ARRAY_SIZE) {
- newNode->array[newNode->filled++] = inputArray[i++];
- }
- if (!head) {
- head = newNode;
- tail = newNode;
- } else {
- newNode->filled += tail->filled;
- tail->next = newNode;
- newNode->prev = tail;
- tail = newNode;
- }
- }
- return head;
- }
- void displayList(Node *head) {
- Node *current = head;
- int nodeIndex = 0, filledCount;
- while (current) {
- printf("Node %d: ", nodeIndex++);
- if (current != head) filledCount = current->filled - (current->prev->filled);
- else filledCount = current->filled;
- for (int i = 0; i < filledCount; i++) {
- printf("%d ", current->array[i]);
- }
- printf("(filled: %d)\n", current->filled);
- current = current->next;
- }
- }
- void freeList(Node *head) {
- Node *current = head;
- Node *nextNode;
- while (current) {
- nextNode = current->next;
- free(current);
- current = nextNode;
- }
- }
- int main() {
- int array1[] = {1, 2, 3, 4, 5, 6, 7, 8};
- int array2[] = {10, 20, 30, 40, 50, 60};
- Node *list1 = createList(array1, sizeof(array1) / sizeof(array1[0]));
- Node *list2 = createList(array2, sizeof(array2) / sizeof(array2[0]));
- printf("List 1:\n");
- displayList(list1);
- printf("\nList 2:\n");
- displayList(list2);
- freeList(list1);
- freeList(list2);
- // if (argc < 2) {
- // printf("Usage: %s <list of integers>\n", argv[0]);
- // return 1;
- // }
- // int *inputArray = (int*)malloc((argc - 1) * sizeof(int));
- // for (int i = 1; i < argc; i++) {
- // inputArray[i - 1] = atoi(argv[i]);
- // }
- // // Create the list
- // Node *list = createList(inputArray, argc - 1);
- // // Display the list
- // displayList(list);
- // // Free the list
- // freeList(list);
- // free(inputArray);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement