Untitled
unknown
c_cpp
a year ago
2.2 kB
6
Indexable
#include <stdio.h> #include <stdlib.h> typedef struct _Node { int size; int *data; struct _Node *next; } Node; Node *ReadOneList(); void PrintList(Node *tmp); void Merge(Node *tmp, int from, int to); void Cut(Node *tmp, int from, int num); Node *ReadOneList() { Node *new = malloc(sizeof(Node)); scanf("%d:", &new->size); new->data = malloc((new->size) * sizeof(int)); new->next = NULL; for (int i = 0; i < new->size; ++i) scanf("%d", &(new->data)[i]); return new; } void Merge(Node *tmp, int from, int to) { Node *FrNode; Node *FrPrev; Node *ToNode; int cnt = 0; for (Node *cur = tmp; cur != NULL; cur = cur->next, cnt++) { if (cnt == from) FrNode = cur; if (cnt == from - 1) FrPrev = cur; if (cnt == to) ToNode = cur; } int NewSize = FrNode->size + ToNode->size; int *new = malloc(NewSize * sizeof(Node)); for (int i = 0; i < ToNode->size; ++i) new[i] = (ToNode->data)[i]; for (int i = ToNode->size; i < NewSize; ++i) new[i] = (FrNode->data)[i - ToNode->size]; free(ToNode->data); ToNode->data = new; ToNode->size = NewSize; FrPrev->next = FrNode->next; free(FrNode->data); free(FrNode); } void Cut(Node *tmp, int from, int num) { Node *FrNode; int cnt = 0; for (Node *cur = tmp; cur != NULL; cur = cur->next, cnt++) if (cnt == from) FrNode = cur; Node *new_node = malloc(sizeof(Node)); new_node->size = FrNode->size - num; new_node->data = malloc((new_node->size) * sizeof(int)); for (int i = 0; i < new_node->size; ++i) (new_node->data)[i] = (FrNode->data)[num + i]; FrNode->size = num; int *new_arr = malloc(FrNode->size * sizeof(int)); for (int i = 0; i < FrNode->size; ++i) (new_arr)[i] = (FrNode->data)[i]; free(FrNode->data); FrNode->data = new_arr; new_node->next = FrNode->next; FrNode->next = new_node; } void PrintList(Node *tmp) { for (Node *cur = tmp->next; cur != NULL; cur = cur->next) for (int i = 0; i < cur->size; ++i) printf("%d%c", (cur->data)[i], " \n"[i == cur->size - 1]); }
Editor is loading...
Leave a Comment