1

Тема: Лінійний однозв’язний список

У мене є програма за допомогою якої користувач заповнує інформаційні поля з 10 вузлів однозв’язного списку
https://replace.org.ua/uploads/images/10577/fbebb9850b02ccb49f6972e304b57900.png
Мені потрібно заповнити і додати новий вузол після наступного вузла з аналогічним інформаційним полем.
Яким чином це можна реалізувати?

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int info;
    struct Node *next;
} TypeNode;

TypeNode * CreateNode(TypeNode * LastNode);

TypeNode *head = NULL;

int main()
{
    system("chcp 1251");
    system("cls");
    printf("Заповніть числами інформаційні поля списку:\n");
    TypeNode *cur = NULL;

    for(int i=0;i<10;i++)
    {
      printf("Вузол %d: ", i);
      cur = CreateNode(cur);
    }
    printf("\n");
    printf("Вихідні дані:\n");
    printf("——————————————\n");

    TypeNode * p0 = head;
    int k=0, d=0;
    while (p0!=NULL)
    {
    printf("Вузол %d: %d\n", k, p0->info);
    printf("——————————————\n");
    p0 = p0->next;
    k++;
    }

    printf("Додавання нового вузла\n");          //створення нового вузла
    printf("Новий вузол: ");

    return 0;
}

TypeNode * CreateNode(TypeNode * LastNode)
{
    TypeNode * newNode;
    newNode = (TypeNode*)malloc(sizeof(TypeNode));
    scanf("%d", &newNode->info);
    newNode->next = NULL;
    if (head==NULL)
        head=newNode;
    else
        LastNode->next = newNode;
    return newNode;
}

2

Re: Лінійний однозв’язний список

Не зрозумів, що значить "аналогічне інформаційне поле". У вас ніби лише одна структура, всі поля "аналогічні", мають тип int. Ви хотіли сказати "з таким самим значенням"? Шукайте потрібний вузол (перебором, по одному) і вставляйте після нього новий. Приблизна сигнатура функцій:

TypeNode *find_node(TypeNode *head, int value); //повертає вказівник на TypeNode зі значенням value у списку head або NULL, якщо нема
void insert_after(TypeNode *node, int value); ///створює новий вузол у списку після node зі значенням value

3

Re: Лінійний однозв’язний список

koala написав:

Не зрозумів, що значить "аналогічне інформаційне поле".    ...    Ви хотіли сказати "з таким самим значенням"? Шукайте потрібний вузол (перебором, по одному) і вставляйте після нього новий.

Так саме це я хотів сказати. Спробував зробити перебираючи по одному, але щось не виходить. Тема для мене нова, тому не зовсім розумію, як саме це зробити.

4

Re: Лінійний однозв’язний список

Ну як. Починаєте з голови, закінчуєте NULL-ом, перехід на наступний по next. Тут у вас, схоже, проблема десь з усвідомленням, вам готове рішення не допоможе. Напишіть як у вас виходить і спробуйте написати питання про це на форум. 80%, що просто цей процес обдумування, як спитати, і наштовхне вас на той шматочок пазла, якого зараз не вистачає.

5

Re: Лінійний однозв’язний список

щось я взагалі не зрозумів, що тут відбувається, як так стек перетворився на чергу?

6

Re: Лінійний однозв’язний список

ur_naz написав:

щось я взагалі не зрозумів, що тут відбувається, як так стек перетворився на чергу?

А де тут про стек чи чергу мова?

7

Re: Лінійний однозв’язний список

ur_naz написав:

щось я взагалі не зрозумів, що тут відбувається, як так стек перетворився на чергу?

offtopic

натисканням на курок

Подякували: 0xDADA11C71