Advertisement
LessVegetables

Untitled

Jun 16th, 2024
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.81 KB | None | 0 0
  1. /*
  2. Элемент двусвязного списка содержит массив целых фиксированной размерности.
  3. Функция создает структуру данных, читает из входного массива значения, пока
  4. массив не кончится. В каждом элементе списка запоминается текущее количество
  5. заполненных элементов массива.
  6.  
  7.  
  8. Требования ко всем задачам:
  9. 1. Задачу реализовать в виде функции, получающей все данные через параметры.
  10. 2. В main создать две статические структуры данных, вызвать функцию 2 раза и вывести 2 результата. Никакие входные данные не вводятся, программа запускается «от одного клика». Структуру данных можно создавать динамически с помощью функции добавления элемента и ее многократного вызова.
  11. 3. Если функция создает структуру данных, то необходима функция трассировки - вывод значений, хранимых в структуре данных, и необходимых данных о текущей конфигурации (уровень вершины дерева, номер элемента списка и т.п.)
  12. Замечания по выполняемым операциям.
  13. Объединение - результат содержит элементы из двух исходных структур данных (СД), элемент, присутствующий в обеих СД, включается в одном экземпляре.
  14. Пересечение - результат содержит элементы, одновременно присутствующие в обеих структурах данных.
  15. Разность - результат содержит элементы из первой СД, которые отсутствуют во второй.
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20.  
  21. #define ARRAY_SIZE 4
  22.  
  23. typedef struct Node {
  24.     int array[ARRAY_SIZE];
  25.     int filled;
  26.     struct Node *prev;
  27.     struct Node *next;
  28. } Node;
  29.  
  30.  
  31. Node* createNode() {
  32.     Node *newNode = (Node*)malloc(sizeof(Node));
  33.     newNode->filled = 0;
  34.     newNode->prev = NULL;
  35.     newNode->next = NULL;
  36.     return newNode;
  37. }
  38.  
  39.  
  40. Node* createList(int *inputArray, int size) {
  41.     Node *head = NULL, *tail = NULL;
  42.     int i = 0;
  43.  
  44.     while (i < size) {
  45.         Node *newNode = createNode();
  46.        
  47.         while (i < size && newNode->filled < ARRAY_SIZE) {
  48.             newNode->array[newNode->filled++] = inputArray[i++];
  49.         }
  50.        
  51.         if (!head) {
  52.             head = newNode;
  53.             tail = newNode;
  54.         } else {
  55.             newNode->filled += tail->filled;
  56.             tail->next = newNode;
  57.             newNode->prev = tail;
  58.             tail = newNode;
  59.         }
  60.     }
  61.  
  62.     return head;
  63. }
  64.  
  65.  
  66. void displayList(Node *head) {
  67.     Node *current = head;
  68.     int nodeIndex = 0, filledCount;
  69.  
  70.     while (current) {
  71.         printf("Node %d: ", nodeIndex++);
  72.  
  73.         if (current != head) filledCount = current->filled - (current->prev->filled);
  74.         else filledCount = current->filled;
  75.  
  76.         for (int i = 0; i < filledCount; i++) {
  77.             printf("%d ", current->array[i]);
  78.         }
  79.         printf("(filled: %d)\n", current->filled);
  80.         current = current->next;
  81.     }
  82. }
  83.  
  84.  
  85. void freeList(Node *head) {
  86.     Node *current = head;
  87.     Node *nextNode;
  88.  
  89.     while (current) {
  90.         nextNode = current->next;
  91.         free(current);
  92.         current = nextNode;
  93.     }
  94. }
  95.  
  96. int main() {
  97.     int array1[] = {1, 2, 3, 4, 5, 6, 7, 8};
  98.     int array2[] = {10, 20, 30, 40, 50, 60};
  99.  
  100.     Node *list1 = createList(array1, sizeof(array1) / sizeof(array1[0]));
  101.     Node *list2 = createList(array2, sizeof(array2) / sizeof(array2[0]));
  102.  
  103.     printf("List 1:\n");
  104.     displayList(list1);
  105.     printf("\nList 2:\n");
  106.     displayList(list2);
  107.  
  108.     freeList(list1);
  109.     freeList(list2);
  110.  
  111.     // if (argc < 2) {
  112.     //     printf("Usage: %s <list of integers>\n", argv[0]);
  113.     //     return 1;
  114.     // }
  115.  
  116.     // int *inputArray = (int*)malloc((argc - 1) * sizeof(int));
  117.  
  118.     // for (int i = 1; i < argc; i++) {
  119.     //     inputArray[i - 1] = atoi(argv[i]);
  120.     // }
  121.  
  122.     // // Create the list
  123.     // Node *list = createList(inputArray, argc - 1);
  124.  
  125.     // // Display the list
  126.     // displayList(list);
  127.  
  128.     // // Free the list
  129.     // freeList(list);
  130.     // free(inputArray);
  131.  
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement