С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 08.05.2011
Сообщений: 18
1

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

24.05.2011, 16:10. Показов 2116. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такой код:
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-ный элемент списка, при том, что он не первый и не последний. Подскажите как это сделать? Я понял, что надо работать с адрессами, но как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2011, 16:10
Ответы с готовыми решениями:

Удалить первый и последний элемент из связанного списка
Всем Привет,как удалить первый и последний элементы из хеша, помогите пожалуйста !!! ...

Что у меня ту не так? Мне надо первый и последний элемент массива покрасить в бюрюзовый цвет
program Alex; uses crt; var N: array of integer; i:integer; begin ClrScr; Randomize; for...

удалить из списка н-ный по счету элемент
1. Дан список и позиция элемента. Удалить элемент с заданным номером. 2. Удалить элемент из...

Вывести содержимое списка в следующем порядке: первый элемент, последний элемент, второй элемент, предпоследни
#include &lt;iostream&gt; #include &lt;list&gt; #include &lt;iterator&gt; void output(std::list&lt;int&gt; myList,...

2
3 / 3 / 4
Регистрация: 06.05.2010
Сообщений: 18
24.05.2011, 18:55 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");
}
вобщем вот класс односвязного списка, тут есть функция удаления, попробуй под свою задачу переделать
0
0 / 0 / 1
Регистрация: 08.05.2011
Сообщений: 18
25.05.2011, 06:58  [ТС] 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");
}
вобщем вот класс односвязного списка, тут есть функция удаления, попробуй под свою задачу переделать
Вот именно, что классы использовать нельзя
0
25.05.2011, 06:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2011, 06:58
Помогаю со студенческими работами здесь

Вернуть первый и последний элемент заданного списка в виде двуэлементного списка
Дано список произвольной длинны .Написать предикат ,который возвращает первый и последний элемент...

Функция которая возвращает первый, второй, предпоследний и последний элемент списка, в виде четырехэлементного списка
Был бы признателен за помощь. И если не затруднит, то с комментариями. Задание: Дан список...

Удалить первый и последний элементы сложного списка
Удалить первый и последний элементы сложного списка (т.е не хватает в подсписке также удалить...

Первый, второй и последний элемент списка
Задание: Дан номер месяца (1 — январь, 2 — февраль, ...). Вывести название соответствующего времени...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru