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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.68
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
#1

Односвязные списки.Вставка элемента в заданную позицию - C++

20.12.2012, 04:52. Просмотров 4338. Ответов 5
Метки нет (Все метки)

Здравствуйте, я столкнулся с такой проблемой точнее наверно с непониманием...короче говоря нужно в список добавить элемент по позиции
вот мой код:
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#pragma once
 
// Элемент данных
struct Element
{
    // Данные
    char data;
    // Адрес следующего элемента списка
    Element * Next;
};
 
// Односвязный список
class List
{
    // Адрес головного элемента списка
    Element * Head;
    // Количество элементов списка
    int Count;
 
public:
    // Конструктор
    List();
    // Деструктор
    ~List();
    // Добавление элемента в список
    // (Новый элемент становится головным)
    void Add(char data);
    void AddInsert(char data, int len,int index);
    
    // Удаление элемента списка
    // (Удаляется головной элемент)
    void Del();
    
    void DelAll();
        
    // Распечатка содержимого списка
    // (Распечатка начинается с головного элемента)
    void Print();
    
    // Получение количества элементов, находящихся в списке
    int GetCount();
};
//
#include <iostream>
#include "list.h"
List::List()
{
    // Изначально список пуст
    Head = NULL;
    Count = 0;
}
 
List::~List()
{
    // Вызов функции удаления
    DelAll();
}
 
int List::GetCount()
{
    // Возвращаем количество элементов
    return Count;
}
 
void List::Add(char data)
{
    // создание нового элемента
    Element * temp = new Element;
 
    // заполнение данными
    temp->data = data;
    // следующий элемент - головной элемент списка
    temp->Next = Head;
 
    // новый элемент становится головным элементом списка
    Head = temp;
 
    Count++;
}
 
void List::Insert(char data,int len,int index)
{
    Element * temp = new Element;
    temp->data = data;
    //Дальше не понимаю как писать
}
 
void List::Del()
{
    if(Head)
    {
        // запоминаем адрес головного элемента
        Element * temp = Head->Next;
        // перебрасываем голову на следующий элемент
        delete Head;
        // удаляем бывший головной элемент
        Head = temp;
        Count--;
    }
}
void List::DelAll()
{
    // Пока еще есть элементы
    while(Head != 0)
        // Удаляем элементы по одному
        Del();
}
 
void List::Print()
{
    // запоминаем адрес головного элемента
    Element * temp = Head;
    // Пока еще есть элементы
    while(temp != 0)
    {
        // Выводим данные
        cout << temp->data; // << " ";
        // Переходим на следующий элемент
        temp = temp->Next;
    }
 
    cout << endl;
}
//
#include <iostream>
#include "list.h"
using namespace std;
void main()
{
    // Создаем объект класса List
    List lst;
    int index=0;
    char a;
    // Тестовая строка
    char s[] = "Hello, World !!!\n";
    // Выводим строку
    cout << s << endl;
    // Определяем длину строки
    int len = strlen(s);
    // Загоняем строку в список
    for(int i = len-1; i >=0; i--)
        lst.Add(s[i]);
    lst.Print();
    cin>>a;
    cin>>index;
        lst.AddInsert(a,len,index);
    // Распечатываем содержимое списка
    lst.Print();
}
Как правильно реализовать функцию void List::Insert сколько не пробовал постоянно не правильно вот решил к Вам обратится может поможете?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 04:52     Односвязные списки.Вставка элемента в заданную позицию
Посмотрите здесь:

Линейные односвязные списки. Вставка элемента - C++
Добрый день! Никогда не была в ладах со списками, поэтому очень нужна помощь! как сделать Дублирование первого элемента после заданного...

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента - C++
Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск...

Односвязные списки. Поменять местами два элемента - C++
Помогите доделать функцию замены двух элементов в списке вот структура struct TNode { int value; TNode* pnext; }; Сама...

Односвязные списки, заменить определенное вхождение элемента в список новым - C++
Подскажите как заменить определенное вхождение элемента в список новым. Я решил сначала удалить это вхождение и на его место вставить новый...

Вставка нового элемента в произвольную допустимую позицию в массиве - C++
Написать функции для работы с динамическим одномерным массивом: a) создание динамического массива указанного размера; b) заполнение...

Вставка элемента в позицию первого вхождения числа, сумма цифр которого кратна 7 - C++
Написал программу с использованием статических и динамических массивов. Пока натолкнулся на такую проблему, что когда мне нужно вставить...

Односвязные списки - C++
помогите написать функцию которая меняет местами два элемента списка, заданные значением информационной части. Node *peremena(Node...

Односвязные списки - C++
Вот такая задачка Дан текстовый файл. Группы символов, разделенные пробелами, будем называть словами. В файле оставить только по...

односвязные списки - C++
Помогите пожалуста в проге нужно в методе класа List нужно вставить елементы с первого списка в второй после последнего вхождение...

Односвязные списки - C++
Всем доброго времени суток. Мне нужно реализовать вот эти операторы в односвязном списке: void gotoTail() void addToTail(Node* node) ...

односвязные списки С++ - C++
Дана последовательность символов s1 , s2 , . . . , sn ( n &gt;= 2 и заранее неизвестно). Получить те символы, принадлежащие...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.12.2012, 04:54     Односвязные списки.Вставка элемента в заданную позицию #2
"Листайте" список до необходимой позиции и вставляйте.
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
20.12.2012, 04:57  [ТС]     Односвязные списки.Вставка элемента в заданную позицию #3
Через цикл делал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void List::Insert(char data,int len,int index)
{
    Element * temp = new Element;
 
    Element * tmp1 = NULL;
    temp->data = data;
    for(int i = 0; i < len; i++)
    {
        Head=Head->Next;
        if(i==index)
        {
            temp->Next = Head;
            i--;
            Head=Head->Next;
            tmp1->Next = Head;
        }
    }
    Count++;
}
Но это как оказалось бред...
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.12.2012, 05:21     Односвязные списки.Вставка элемента в заданную позицию #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void List::Insert(char data,int index)
{
    if(index<=0 && !(this->Head)){
        Add(data); ++(this->Count); return;
    }
    Element * tf=this->Head;
    for(int i=1;i<index && tf->Next;++i)
        tf=tf->Next;
    Element * temp = new Element;
    temp->data = data;
    temp->Next=tf->Next;
    tf->Next=temp;
    ++(this->Count);
}
только доработать бы нужно
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
20.12.2012, 05:22     Односвязные списки.Вставка элемента в заданную позицию #5
Цитата Сообщение от Alexem Посмотреть сообщение
i--;
зачем это здесь?
Alexem
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 35
20.12.2012, 05:27  [ТС]     Односвязные списки.Вставка элемента в заданную позицию #6
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void List::Insert(char data,int index)
{
    if(index<=0 && !(this->Head)){
        Add(data); ++(this->Count); return;
    }
    Element * tf=this->Head;
    for(int i=1;i<index && tf->Next;++i)
        tf=tf->Next;
    Element * temp = new Element;
    temp->data = data;
    temp->Next=tf->Next;
    tf->Next=temp;
    ++(this->Count);
}
только доработать бы нужно
Спасибо большое!!!
Yandex
Объявления
20.12.2012, 05:27     Односвязные списки.Вставка элемента в заданную позицию
Ответ Создать тему
Опции темы

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