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

Надо удалить n-ный элемент списка, при том, что он не первый и не последний - C++

Восстановить пароль Регистрация
 
Aleks:D
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 18
24.05.2011, 16:10     Надо удалить n-ный элемент списка, при том, что он не первый и не последний #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<iostream>
#include "rus.h"
using namespace std;
struct Info
{
     int d;
};
 
struct Node
{
    Info info;
    Node *next;
};
 
Node * first(void);
Node * add(Node * pend);
void  print(Node * pbegin);
 
//Начальное формирование списка
Node * first(void)
{
   //Выделяем память под элемент списка
   Node * pv=new  Node; 
   cout<<rus("\nВведите число: ");
cin>>pv->info.d; 
   pv->next=0; //Адрес последней структуры в списке - 0
   return pv; //возврат адреса начала списка
}
//Добавление элемента в конец списка
Node * add(Node * pend)
{
  //Выделяем память под очередной элемент списка
   Node * pv=new Node;
   cout<<rus("\nВведите число: ");
   cin>>pv->info.d;
   pv->next=0; //Адрес последней структуры в списке - 0
   pend->next=pv; //Сцепляем по адресу созданную структуру со списком 
   return pv; //возврат нового адреса последней структуры в списке
}
//Вывод списка на экран
void print(Node * pbegin)
{
   Node * pv=pbegin;
   while (pv) //пока адрес текущей структуры списка не 0
   {
      cout<< pv->info.d<<endl;
      pv=pv->next; //переход к следующей структуре в списке
   }
   return;
}
 
void main(void)
{
   Node *pbegin, *pend;
   int i;
   pend=pbegin=first();  //создали список
   for(i=0; i<6; i++)   //добавили еще 5 элементов в список
   pend=add(pend);
   print(pbegin);   //вывели весь список на экран
   cout<<pend[3];
   print(p);    //вывели весь список на экран
   system("pause");
   return;
}
Надо удалить n-ный элемент списка, при том, что он не первый и не последний. Подскажите как это сделать? Я понял, что надо работать с адрессами, но как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2011, 16:10     Надо удалить n-ный элемент списка, при том, что он не первый и не последний
Посмотрите здесь:

Создать динамический список. Удалить из него первый и последний элемент. C++
Удалить первый и последний элемент очереди C++
C++ удалить первый элемент из списка
C++ Удалить первый элемент списка
C++ Удалить из непустого списка L последний элемент.
Строки. Как найти в слове первый элемент? Второй элемент, последний элемент? C++
Удалить первый элемент односвязного списка C++
C++ Задача Иосифа Флавия. Удалить каждый второй элемент из списка и в конце вывести на экран последний оставшийся элемент

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lasbat
2 / 2 / 0
Регистрация: 06.05.2010
Сообщений: 18
24.05.2011, 18:55     Надо удалить n-ный элемент списка, при том, что он не первый и не последний #2
классы можно использовать? или нужно сюда добавить функцию?

Добавлено через 2 часа 31 минуту
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
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
 
template <class Item>
class list
{
    struct elem {
        Item inf;       
        elem *next;
        elem (Item x):inf(x),next(0)
        {}
    };
    elem *head; //указатель на начало
    int size;  //размер списка – количество элементов
    elem *find(int index) //возвращает указатель на элемент с номером index
            {
                  if ((index<1)||(index>size))
                        return NULL;
                  else
                  {
                        elem *cur=head;
                        for (int i=1;i<index;i++)
                             cur=cur->next;
                        return cur;
                  }
            }
 
public:
    //конструктор класса
    list():head(0),size(0){}
    //деструктор класса
    ~list()
    {while (!empty())
    remove(1);
    }
 
    //проверка пустоты списка
    bool empty()
    {return head==0;}
 
    //возвращает размер списка, т.е. количество элементов
    int getlength()
    {return size;}
 
    //возвращает значение элемента по его номеру
    Item get(int index)
    {
 
        elem *r=find(index);   
        Item i=r->inf;   
        return i;  
 
    }
 
    //осуществляет вставку элемента со значением data в позицию index
    void insert(int index, Item data)
    {
        int newLength=getlength()+1;
 
        elem *newPtr=new elem(data);
        size=newLength;
        if (index==1)
        {
            newPtr->next=head;
            head=newPtr;
        }
        else
        {
            elem *prev=find(index-1);
            newPtr->next=prev->next;
            prev->next=newPtr;
        }
    }
 
 
//осуществляет удаление элемента в позиции index
void remove(int index)
{
    elem *cur;
    --size;
    if (index==1)
    {
        cur=head;
        head=head->next;
    }
    else
    {
        elem *prev=find(index-1);
        cur=prev->next;
        prev->next=cur->next;
    }
    cur->next=NULL;
    delete cur;
}
 
};
 
int main() {
    ifstream in("input.txt");
 
    string tmp;
    list <string> l1;
    
    int n=0;// how many words
    while (in.peek()!=EOF) 
    {
        n++;
        in>>tmp;
        l1.insert(n,tmp);
        
    }
    cout<<"before deleting: ";
    for(int i=1;i<=l1.getlength();i++)
        cout<<l1.get(i)<<" ";
    cout<<endl;
    l1.remove(2);
    cout<<"after deleting: ";
    for(int i=1;i<=l1.getlength();i++)
        cout<<l1.get(i)<<" ";
    cout<<endl;
    system("PAUSE");
}
вобщем вот класс односвязного списка, тут есть функция удаления, попробуй под свою задачу переделать
Aleks:D
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 18
25.05.2011, 06:58  [ТС]     Надо удалить n-ный элемент списка, при том, что он не первый и не последний #3
Цитата Сообщение от lasbat Посмотреть сообщение
классы можно использовать? или нужно сюда добавить функцию?

Добавлено через 2 часа 31 минуту
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
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
 
template <class Item>
class list
{
    struct elem {
        Item inf;       
        elem *next;
        elem (Item x):inf(x),next(0)
        {}
    };
    elem *head; //указатель на начало
    int size;  //размер списка – количество элементов
    elem *find(int index) //возвращает указатель на элемент с номером index
            {
                  if ((index<1)||(index>size))
                        return NULL;
                  else
                  {
                        elem *cur=head;
                        for (int i=1;i<index;i++)
                             cur=cur->next;
                        return cur;
                  }
            }
 
public:
    //конструктор класса
    list():head(0),size(0){}
    //деструктор класса
    ~list()
    {while (!empty())
    remove(1);
    }
 
    //проверка пустоты списка
    bool empty()
    {return head==0;}
 
    //возвращает размер списка, т.е. количество элементов
    int getlength()
    {return size;}
 
    //возвращает значение элемента по его номеру
    Item get(int index)
    {
 
        elem *r=find(index);   
        Item i=r->inf;   
        return i;  
 
    }
 
    //осуществляет вставку элемента со значением data в позицию index
    void insert(int index, Item data)
    {
        int newLength=getlength()+1;
 
        elem *newPtr=new elem(data);
        size=newLength;
        if (index==1)
        {
            newPtr->next=head;
            head=newPtr;
        }
        else
        {
            elem *prev=find(index-1);
            newPtr->next=prev->next;
            prev->next=newPtr;
        }
    }
 
 
//осуществляет удаление элемента в позиции index
void remove(int index)
{
    elem *cur;
    --size;
    if (index==1)
    {
        cur=head;
        head=head->next;
    }
    else
    {
        elem *prev=find(index-1);
        cur=prev->next;
        prev->next=cur->next;
    }
    cur->next=NULL;
    delete cur;
}
 
};
 
int main() {
    ifstream in("input.txt");
 
    string tmp;
    list <string> l1;
    
    int n=0;// how many words
    while (in.peek()!=EOF) 
    {
        n++;
        in>>tmp;
        l1.insert(n,tmp);
        
    }
    cout<<"before deleting: ";
    for(int i=1;i<=l1.getlength();i++)
        cout<<l1.get(i)<<" ";
    cout<<endl;
    l1.remove(2);
    cout<<"after deleting: ";
    for(int i=1;i<=l1.getlength();i++)
        cout<<l1.get(i)<<" ";
    cout<<endl;
    system("PAUSE");
}
вобщем вот класс односвязного списка, тут есть функция удаления, попробуй под свою задачу переделать
Вот именно, что классы использовать нельзя
Yandex
Объявления
25.05.2011, 06:58     Надо удалить n-ный элемент списка, при том, что он не первый и не последний
Ответ Создать тему
Опции темы

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