Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15

Связный список и вставка элемента

17.06.2010, 03:47. Показов 3619. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне надо написать прогу, которая создает связный список (линейный), вставляет в любом месте элемент. Написала создание связного списка, написала вставку. При запуске компилятор ошибку не выдает, но при выполнении кода, который делает вставку, программа выводит ошибку. Скажите, что у меня не так в коде с этой вставкой?!

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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdio.h>
#include <ctime>
#include <string.h>
#include <conio.h>
 
struct Node 
{
    int data;
    Node *next;
};
 
int main()
{
    setlocale (LC_ALL,"Russian");
    Node *start;            // указатель на начало списка
    int nput, ndel;         //номера элемента для вставки и для удаления
    Node *put, *del;        //вспомогательные указатели
    int kol;                //количество элементов в списке
    Node *spis = new Node;    // создание списка
 
    cout << "Введите количество элементов: ";
    cin >> kol;
    cout << "Элемент 1: ";
    cin >> spis->data;      //инициализация 1-го элемента данными
    spis->next = NULL;        // указатель NULL, т.к. конец списка
 
    start = spis;               // копирование указателя на начало списка
 
    for (int i=1; i<kol; i++)   // добалвение элементов
     {
         spis->next = new Node;     // выделение памяти под новый элемент
         cout << "Элемент " << i+1 << " : ";
         cin >> spis->next->data;           // ввод данных
         spis->next->next = NULL;           // следующий элемент - NULL
         spis = spis->next;             //новый элемент становится текущим
     }
    
    // вывод списка
    cout << "-------------";
    spis = start;
    int i = 1;
    while(i <= kol)
    {
        cout << endl << spis->data;
        spis = spis->next;
    } 
    // вставка элемента
    cout << "Номер элемента для вставки:";
    cin >> nput;
    spis = start;
    cout << "Элекмент " << nput << ": ";
    cin >> nput;
    for (int i=1; i< nput; i++)
        spis = spis->next;
    put->next = spis->next;
    spis->next = new Node;
    cin >> spis->next->data;
    spis->next->next = put->next;
    put->next = NULL;
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2010, 03:47
Ответы с готовыми решениями:

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке)
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов. Вот такая задачка : Программа...

Ошибка при добавлении элемента в связный список
Помогите найти ошибку в программе,добавляю элементы в связный список,и если использую второй push_back он его добавляет,даже делает...

Вставка элемента в однонаправленный список
помогите написать функцию добавления в конец списка нового элемента требования: ф-ция типа void , принимает одно значение (head). даже...

1
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
17.06.2010, 15:57
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
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Node 
{
        int data;
        Node *next;
};
void print (Node *); 
int main()
{
    setlocale (LC_ALL,"Russian");
    Node *start=NULL;                    // указатель на начало списка
    int nput, buf, i, kol;                 //номера элемента для вставки и для удаления
    Node *put, *spis, *last, *prev;                //вспомогательные указатели 
    cout << "Введите количество элементов: ";
    cin >> kol;
    for (i=0; i<kol; i++)
    {
        spis=new Node;
        cout << "Элемент "<<i+1<<": ";
        cin>>spis->data;
        spis->next=NULL;
        if (start==NULL)
            start=spis;
        else
            last->next=spis;
        last=spis;
    }
    // вывод списка
    print (start);
    // вставка элемента
    spis=start;
    cout << "Номер элемента для вставки:";
    cin >> nput;
    cout << "Элекмент " << nput << ": ";
    cin >> buf;
    put=new Node;
    put->data=buf;
    put->next=NULL;
    if (nput>kol)
        nput=kol+1;
    if (nput<=1)
    {
        put->next=start;
        start=put;
    }
    else
    {
        for (i=0; i<nput-2; i++)
            spis=spis->next;
        put->next=spis->next;
        spis->next=put;
    }
    print (start);
    return 0;
}
void print (Node *spis)
{
    cout << "-------------\n";
    while(spis)
    {
        cout << spis->data<<endl;
        spis = spis->next;
    }
}
У вас, например, не так с созданием списка - а если пользователь введет количество элементов 0... вы все равно попросите ввести 1-й элемент. И вообще как-то странно организовано...
Вставка. Вы говорите: введите номер элемента, записываете номер в переменную nput, потом введите элемент и значение элемента снова записываете в переменную nput, а потом уже все идет неправильно, т.к. цикл идет до значения, а не до позиции (делает больше шагов, и spis, в конце концов, будет переведена на NULL (если введенное значение больше kol)).
Еще не уточненный момент, если у вас список из 5 элементов, а вы хотите поставить элемент на 10, будет ошибка (описанная выше).
А вообще лучше было бы это все распихать по функциям)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2010, 15:57
Помогаю со студенческими работами здесь

Вставка элемента в пустой односвязный список
Помогите сделать вставку элемента в пустой односвязный список. У меня работает вставка только при непустом.Заранее благодарен!Функция...

Списки, вставка Х элементов в список после 2-ого элемента
Доброго времени суток, прошу помощи у знающих. что то списки совсем туго даются.. задача - имеется некий список, нужно вставить несколько...

Вставка элемента в линейный односвязный список после заданного
Я составила программу, но возникла проблема с реализацией вставки элемента после указанного значения. А точнее с составление функции,...

Функция: вставка элемента в двусвязный список после заданного
Всем доброго времени суток! Нужно написать функцию вставки элемента в двусвязный список после заданного. Список моего задания состоит из 4...

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости.
Друзья помогите с реализацией списка. Нужно запрограммировать связный список, в котором информация о книгах сортируется по убыванию...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru