Serega_1
1

Как поменять местами элементы односвязного списка ?

03.06.2013, 20:59. Показов 1871. Ответов 0
Метки нет (Все метки)

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

Заранее огромное спасибо за Вашу помощь !

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
struct People
{   char Name [20];
    int Age;
    int Year;
};
struct TList
{   People info;         //інформаційне поле
    TList *next;     //адреса наступного елемента
};
class CList 
{ TList *head;   //адреса голови списку
  public:
  CList()
  { head =new TList;//выделяем память голове списка
    head=NULL;
  };
 
  void ReadConsole()    //ввод данных с клавиатуры
 {   int i=0;
     char nam[20];//для новых введённых элементов
     int a;
     int y;
     TList *pv,*pn;//указатели на новые элементы 
     int flag;
     cout<<"\n Введите элементы списка "<<endl;
     cout<<"\n Введите имя  :";
     cin>>nam;
     cout<<"\n Введите возраст :";
     cin>>a;
     cout<<"\n Введите год рождения :";
     cin>>y;
     head=Head(nam,a,y);
     cout<<"\n Продолжать ?Для продолжения введите 1"<<endl;
     cout<<"\n";
     cin>>flag;
     if (flag==1){
                    cout<<"\n Введите элементы списка "<<endl;
                    cout<<"\n Введите имя :";
                    cin>>nam;
                    cout<<"\n Введите возраст :";
                    cin>>a;
                    cout<<"\n Введите год рождения :";
                    cin>>y;
                    pv=Head(nam,a,b);//выделяем память для второго эл. списка 
                    head->next=pv;//записываеи адресс 2-го эл. в предыдущий элемент 
     do{
            cout<<"\n Продолжать ?Для продолжения введите 1"<<endl;
            cout<<"\n";
            cin>>flag;
            if(flag==1){
                            cout<<"\n Введите элементы списка "<<endl;
                            cout<<"\n Введите имя операционной системы :";
                            cin>>nam;
                            cout<<"\n Введите розрядность операционной системы :";
                            cin>>roz;
                            cout<<"\n Введите минимальный объём памяти :";
                            cin>>op;
                            pn=Head(nam,a,b);
                         pv->next=pn;//для следущего элемента
                       }
     else break;
     pv=pn;//для новых эл.
       }while (1);
    }
};
  
  void WriteMonitor()//вывод данных на экран
 {  TList *pv,*pn;
    if(head !=NULL){   //если есть адресс
                        int i=2;
                        WrM(head);
                        pv=head->next;
                        while (pv!=NULL)//до конца списка 
                       {    
                            WrM(pv);
                            pn=pv->next;
                            pv=pn;
                        }
                     }
    else cout<<"\n Список пуст";
 }; 
 
 
  TList *Head(char nam[20],int a, int y)//функция для размещения элемента списка в памяти 
  {  TList *pv =new TList;
     for(int j=0;j<20;j++)
     pv->info.Name[j]=nam[j];
     pv->info.Age=a;
     pv->info.Year=y;
     pv->next=NULL;
     return pv;
  };
 
  void WrM(TList *pv)                     //вывод на экран
  {  cout<<pv->info.Name<<" ";
     cout<<pv->info.Age<<" ";
     cout<<pv->info.Year<<endl;
  };
 
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2013, 20:59
Ответы с готовыми решениями:

Поменять местами последний и предпоследний элементы односвязного списка
Ребят, помогите, пожалуйста, реализовать ф-ию замены последнего и предпоследнего элементов местами...

Поменять местами два элемента односвязного списка
Дан односвязный список. Требуется напечатать исходный список. Поменять местами два элемента списка,...

Поменять местами заданные элементы списка
Planet *Replace(Planet *planet) { int first = 0; int second = 0; cout &lt;&lt; &quot;Первое&quot; &lt;&lt; endl;...

Как записать элементы односвязного списка в массив?
прошу прощение за столь поздний визит. прошу помочь мне... мне нужно записать элементы списка в...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2013, 20:59
Помогаю со студенческими работами здесь

Поменять местами первый и последний элементы непустого списка
Тема: динамические структуры: списки и очереди C++ Поменять местами первый и последний элементы...

Однонаправленный список. Поменять местами максимальный и первый элементы списка
Поменять местами максимальный и первый элементы списка (ввод прерывается если ввести число 999) И,...

Поменять местами первый и последний элементы списка и удалить их средне арифметическое
Помогите решить задачи пожалуйста!!! 1)Дан список, содержащие числовые данные. Поменять местами...

Создать динамический список, поменять местами последний и первый элементы списка, предпоследний и второй и т.д.
Всем привет. Подкиньте идею, весь мозг сломал. Задание:Создать динамический список. Поменять...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru