Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
#1

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

17.06.2010, 03:47. Просмотров 1674. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2010, 03:47     Связный список и вставка элемента
Посмотрите здесь:

C++ Связный список
C++ Связный список
Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) C++
Связный список C++
Связанный список. Создать, записать в связный список последовательность слов,обозначающих месяцы года,заданных пользователем C++
C++ Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента
C++ Связный список
Вставка нового элемента в линейный односвязный список перед элементом с максимальным значением ключа C++
Вставка элемента в линейный односвязный список после заданного C++
Ошибка при добавлении элемента в связный список C++
C++ Вставка элемента в пустой односвязный список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
17.06.2010, 15:57     Связный список и вставка элемента #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
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, будет ошибка (описанная выше).
А вообще лучше было бы это все распихать по функциям)
Yandex
Объявления
17.06.2010, 15:57     Связный список и вставка элемента
Ответ Создать тему
Опции темы

Текущее время: 22:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru