23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 386
1

Добавление элемента после элемента с заданным ключом в однонаправленном списке

22.05.2017, 20:02. Показов 928. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
У меня неправильно работает функция insert, которая должна добавлять элемент после элемента с заданным ключом (key1).
Подскажите, пожалуйста, как исправить эту функцию.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node{
    int value;
    int key;
    struct Node *next;
}Node;
 
void push(Node **head, int data, int key1) {
    Node *tmp = (Node*) malloc(sizeof(Node));
    tmp->value = data;
    tmp->key=key1;
    tmp->next = (*head);
    (*head) = tmp;
}
 
void pop(Node **head, int *key1, int *val) {
    Node* prev = NULL;
    if (head == NULL) {
        exit(-1);
    }
    prev = (*head);
    *val = prev->value;
    *key1 = prev->key;
    (*head) = (*head)->next;
    free(prev);
}
 
void insert(Node *head, int key1, int key2, int val) {
int key3;
    Node *tmp = NULL;
    do
    if (head->next){
        key3=head->key;
        head=head->next;
    }
    else
        break;
    while(key3!=key1);
    tmp = (Node*) malloc(sizeof(Node));
    tmp->value = val;
    tmp->key=key2;
    if (head->next) {
        tmp->next = head->next;
    } else {
        tmp->next = NULL;
    }
    head->next = tmp;
}
 
int main()
{int key,val,keykol=0;
    Node *head=NULL;
    push(&head,27,keykol);
    ++keykol;
    push(&head,290,keykol);
    ++keykol;
    push(&head,3467,keykol);
    ++keykol;
    push(&head,8970,keykol);
    ++keykol;
    insert(head,0,keykol,78965);
    ++keykol;
    pop(&head,&key,&val);
    printf("val: %d key: %d\n",val,key);
    pop(&head,&key,&val);
    printf("val: %d key: %d\n",val,key);
    pop(&head,&key,&val);
    printf("val: %d key: %d\n",val,key);
    pop(&head,&key,&val);
    printf("val: %d key: %d\n",val,key);
     pop(&head,&key,&val);
    printf("val: %d key: %d\n",val,key);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2017, 20:02
Ответы с готовыми решениями:

Удалить в списке элемент, стоящий после последнего минимального элемента
Удалить в списке элемент, стоящий после последнего минимального элемента. правила форума

Вставить новый элемент после самого большого элемента в односвязном списке
Задача в том чтоб сделать функцию которая вставляет новый node после самого большого в списке ...

Добавить после элемента массива с заданным индексом элемент со значением 100
Вот сами задания: 1. 1) Сформировать одномерный массив целых чисел, используя генератор...

Найти максимальный элемент в однонаправленном линейном списке
здравствуйте! помогите помочь написать задача или киньте ссылку по её решению. Си...

1
1 / 1 / 1
Регистрация: 08.12.2016
Сообщений: 30
22.05.2017, 20:56 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Node*AddInAfterTheGivenElement(Node**p, int g, int k)
{
    Node *ins = new Node;
    Node*walk = *p;
    ins->k = k;
    Node*tmp;
 
    if (*p == NULL)
    {
        printf("\nСписок пуст и заданного элемента нет. Создан узел со сзначением 'K' в начале списка\n");
        ins->k = k;
        ins->next = *p;
        *p = ins;
        return *p;
}
    else
    { 
            if (walk->next->k == g)
            {
                while (walk->k != g)
                    walk = walk->next;
                tmp = walk->next;
                walk->next = ins;
                ins->next = tmp;
                return*p;
            }
            else
                printf("\n заданного элемента нет. \n");
        return NULL;
    }
    return *p;
}
Вот функция, которая тебе нужна.
1
22.05.2017, 20:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2017, 20:56
Помогаю со студенческими работами здесь

Удаление элемента в Списке
В чём ошибка функции удаления элемента. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef...

Удаление элемента в списке
Проблема: нужно удалить элемент, но я не понимаю как связать то, что я введу для удаления с...

Линейный односвязный список: реализовать добавление элемента после узла с заданным ключом
Здравствуйте, кто может понять это задание добавление элемента после узла с заданным ключем...

Вставить в однонаправленном списке число 1.5 после каждого элемента с отрицательным значением
создать линейный однонаправленный список из вещественных чисел. вставить в список число 1.5 после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru