Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct Node { //элемент списка
- char* value;
- Node* next;
- } Node;
- typedef struct List { //сам список
- Node* head;
- int length;
- } List;
- List* create_list() { //выделяет память и создает готовый для работы пустой список
- List* new_list = (List*)malloc(sizeof(List));
- new_list->head = NULL;
- new_list->length = 0;
- return new_list;
- }
- void add(List* list, char* value) { //добавляет новый элемент в список
- Node* new_node = (Node*)malloc(sizeof(Node));
- new_node->value = value;
- new_node->next = NULL;
- Node* temp = list->head;
- if (temp == NULL) {
- list->head = new_node;
- }
- else {
- while (temp->next != NULL)
- temp = temp->next;
- temp->next = new_node;
- }
- list->length++;
- }
- bool equal(char* first, char* second) { //проверяем ровны ле две строки
- int i = 0;
- while (first[i] != '\0' && second[i] != '\0') {
- if (first[i] != second[i])
- return false;
- i++;
- }
- if (first[i] != '\0' || second[i] != '\0')
- return false;
- return true;
- }
- void insert(List* L1, List* L2, char* E) { //вставляет второй список в первый список после елемента Е
- Node* temp = L1->head;
- while (!equal(temp->value, E) && temp->next != NULL) //находим Е или конец списка
- temp = temp->next;
- if (!equal(temp->value, E)) //если не нашли Е то уходим отсюда
- return;
- Node* begin = L2->head;
- Node* end = L2->head;
- while (end->next != NULL)
- end = end->next;
- end->next = temp->next; //конец второго списка указывает на следующий элемент
- temp->next = begin; //Е указывает на начало второго списка
- L1->length += L2->length;
- }
- void print_list(List* list) { //выводит список
- Node* temp = list->head;
- while (temp != NULL) {
- int i = 0;
- while (temp->value[i] != '\0')
- printf("%c", temp->value[i++]);
- printf(" ");
- temp = temp->next;
- }
- printf("\n");
- }
- void main() {
- List* L1 = create_list();
- List* L2 = create_list();
- char* E = (char*)malloc(sizeof(char));
- printf("L1: ");
- char sym = '\0';
- scanf("%c", &sym);
- while (sym != '\0' && sym != '\n') { //считываем перрвый спсиок до -1
- char* word = (char*)malloc(sizeof(char));
- int i = 0;
- while (sym != '\0' && sym != '\n' && sym != ' ') {
- word = (char*)realloc(word, (i + 1) * sizeof(char));
- word[i] = sym;
- scanf("%c", &sym);
- i++;
- }
- word[i] = '\0';
- add(L1, word);
- scanf("%c", &sym);
- }
- printf("L2: ");
- scanf("%c", &sym);
- while (sym != '\0' && sym != '\n') { //считываем второй список до -1
- char* word = (char*)malloc(sizeof(char));
- int i = 0;
- while (sym != '\0' && sym != '\n' && sym != ' ') {
- word = (char*)realloc(word, (i + 1) * sizeof(char));
- word[i] = sym;
- scanf("%c", &sym);
- i++;
- }
- word[i] = '\0';
- add(L2, word);
- scanf("%c", &sym);
- }
- printf("E: ");
- int i = 0;
- scanf("%c", &sym);
- while (sym != '\0' && sym != '\n' && sym != ' ') { //считываем Е
- E = (char*)realloc(E, (i + 1) * sizeof(char));
- E[i] = sym;
- scanf("%c", &sym);
- i++;
- }
- E[i] = '\0';
- insert(L1, L2, E); //делаем магию
- print_list(L1); //выводим это дело
- printf("length: %d", L1->length); //и выводим длину этого дела
- scanf("%d", &E);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement