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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
nelson1992
3 / 3 / 0
Регистрация: 21.10.2009
Сообщений: 77
26.11.2011, 01:38     Добавление элементов в односвязный список #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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//Создание и печать однонаправленного списка
#include <string.h>
#include<iostream>
#include <conio.h>
using namespace std;
// описание структуры
struct point
{
    int age; // информационное поле
    point* next; // адресное поле
};
 
// создание одного элемента
point* make_point()
{
    point* p = new(point);// выделить память под элемент списка
    cout<<"\nВведите элемент:\n";
    cin>>p->age;
    p->next=0;         // сформировать адресное поле 
    return p;         // вернуть указатель на созданный элемент
}   
 
 
// формирование списка из n элементов
point* make_list(int n)
{
    point* beg=make_point();  // сформировать первый элемент
    point* r;   // вспомогательная переменная для добавления
    for(int i=1;i<n;i++)
    {
        r = make_point();  // сформировать следующий элемент
        // добавление в начало списка
        r->next = beg;
 beg = r; 
     }
     return beg; // вернуть адрес начала списка
}   
 
// печать списка, на который указывает указатель beg
int print_list(point* beg)
{
    point* p=beg; // р присвоить адрес 1-го элемента списка
    int k=1;    // счетчик количества напечатанных элементов 
    while(p)    // пока нет конца списка
    {   
        // печать элемента, на который указывает элемент p
    cout<<"\nЭлемент №"<<k<<": "<<p->age;
    cout<<"\n--------------------------------\n";
        p = p->next;  // переход к следующему элементу
        k++;
    }
    return k; // количество элементов в списке
}
 
// удаление элемента с номером k
point* del_point(point* beg, int k)
{
    // поставить вспомогательную переменную на начало списка
    point* p = beg;
    point* r;  // вспомогательная переменная для удаления
    int i=1;    // счетчик элементов в списке
    if(k==1)   // если удалить первый элемент
    {
        beg = p->next;
        delete[]p;         // удалить элемент из списка
        return beg;        // вернуть адрес первого элемента 
    }
 
     while(p)  //пока не конец списка
     {
        /*дошли до элемента с номером k-1, чтобы поменять его
        поле next*/
        if(i == k-1)
        {
         // поставить r на удаляемый элемент
            r=p->next; 
            if(r)     // если p не последний элемент
            {
                p->next=r->next;   // исключить r из списка
                delete[]r;         // удалить элемент из списка
            }
            /*если p - последний, то полю next присвоить 0*/
           else p->next = 0;
        }
     p=p->next;          // переход к следующему элементу  
     i++;                // увеличить счетчик элементов
     }
     return beg;         // вернуть адрес первого элемента
}
 
int main()
{
    setlocale (LC_CTYPE,"Russian");
    int n,l,m,q;
    cout<<"\nВведите количество элементов:\n";
    cin>>n;
    point* beg = make_list(n); // формирование списка
    if(!print_list(beg))       // печать списка
    cout<<"\nСписок пуст!";
    cout<<"\nВведите номер удаляемого элемента:\n";
    cin>>l;
    del_point(beg,l);
    if(!print_list(beg)) 
    cout<<"\nСписок пуст!";
    getch();
    return 0;
}
Добавлено через 2 часа 6 минут
Помогите кто-нибудь....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 01:38     Добавление элементов в односвязный список
Посмотрите здесь:

Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. C++
Добавление элементов в список C++
Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением) C++
C++ Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка
Односвязный список. Добавление и удаление в строку C++
Односвязный список (удаление элементов) C++
C++ Добавление элементов в список
C++ Добавление элементов в односвязный линейный список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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