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

АТД список. Перемещение заданного элемента на первую позицию - C++

Восстановить пароль Регистрация
 
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
28.09.2011, 19:27     АТД список. Перемещение заданного элемента на первую позицию #1
Здравствуйте!!

Подскажите пожалуйста как переместить элемент списка на первую позицию?

Например:

есть список o o t o t, пользователь ввел символ "t" в итоге получился список t t o o o

Как видите все элементы, которые были равны "t" переместились на первые позиции в списке!!


Как можно это реализовать???

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
#include "iostream"
#include "list"
 
using std::cout;
using std::cin;
using std::list;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
 
    list<char> lst;
    
    int n;
 
    char num;
    char ch;
    
    cout << "Введите длину списка: ";
    cin >> n;
    cout << '\n';
 
    cout << "Введите элементы списка: ";
    for (int i = 0; i < n; i++)
    {
        cin >> num;
        lst.push_back(num);
    }
    cout << '\n';
 
    cout << "Введите символ который хотите переместить: ";
    cin >> ch;
    cout << '\n';
 
    //вот тут должно быть перемещение
 
    cout << "Исходных список: ";
    for (list<char>::iterator iter1 = lst.begin(); iter1 != lst.end(); iter1++)
    {
        cout << *iter1 << " ";
    }
    cout << '\n';
 
    system("pause >> NULL");
    return 0;
}
Огромное спасибо!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 19:27     АТД список. Перемещение заданного элемента на первую позицию
Посмотрите здесь:

C++ АТД-однонаправленный список
АТД список. Сравнение элементов C++
АТД список. Объединение списков. C++
АТД список. Замена элементов в списке C++
C++ Атд список. Удалить одинаковые элементы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.09.2011, 20:08     АТД список. Перемещение заданного элемента на первую позицию #2
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
#include <windows.h>
#include <iostream>
#include <list>
 
using std::cout;
using std::cin;
using std::list;
 
 
bool compare_ (char first, char second){
 if (first== 't')
  return true;
 return false; 
}
 
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
    
        setlocale(0, "");
 
        list<char> lst;
        
        int n;
 
        char num;
        char ch;
        
        cout << "Введите длину списка: ";
        cin >> n;
        cout << '\n';
 
        cout << "Введите элементы списка: ";
        for (int i = 0; i < n; i++)
        {
                cin >> num;
                lst.push_back(num);
        }
        cout << '\n';
 
        cout << "Введите символ который хотите переместить: ";
        cin >> ch;
        cout << '\n';
 
        //вот тут должно быть перемещение
        lst.sort(compare_);
         
        cout << "Исходных список: ";
        for (list<char>::iterator iter1 = lst.begin(); iter1 != lst.end(); iter1++)
        {
                cout << *iter1 << " ";
        }
        cout << '\n';
 
        system("pause >> NULL");
        return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
28.09.2011, 20:12     АТД список. Перемещение заданного элемента на первую позицию #3
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
#include <list>
#include <iostream>
using namespace std;
 
int  main(void) {   
    list<char>   lst;
    for(const char* s = "ATRIBUTE TANK AUDI-TT"; *s; lst.push_back(*s++));
    
    char ch = 'T';
    //cin >> ch;
 
    list<char>::iterator last, first, pos = lst.begin();
    if( *pos == ch )
         *pos++;
    for(list<char>::iterator iter = pos; iter != lst.end(); *iter++) {
          if(*iter == ch ) {
                  for(last = iter, first = --iter; 1; --last) {
                        swap(*last, *first);
                        if(first == pos)
                               break;
                         --first;
                   }
                   *pos++;
           }
      }
 
      for(; ! lst.empty(); lst.pop_front())
              cout << lst.front();
      cout.put('\n');
      cin.get();
      return 0;
}
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
28.09.2011, 20:23  [ТС]     АТД список. Перемещение заданного элемента на первую позицию #4
Спасибо, большое! опять выручаете))))) спасибо!!

Добавлено через 1 минуту
kravam, твой вариант компилился, но выдавал ошибку, не выводил отсортированный список!!!

А вариант xAtom работает на Ура!! спасибо за старания!!
Петррр
 Аватар для Петррр
5917 / 3354 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
28.09.2011, 21:06     АТД список. Перемещение заданного элемента на первую позицию #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
#include <iostream>
#include <list>
#include <algorithm>
 
using namespace std;
 
template<char ch>
bool move(char item)
{
    return item == ch;
}
 
int main()
{
    list<char> _list;
    _list.push_back('o');
    _list.push_back('t');
    _list.push_back('o');
    _list.push_back('o');
    _list.push_back('t');
    _list.push_back('o');
    _list.push_back('t');
    partition(_list.begin(), _list.end(), move<'t'>);
    copy(_list.begin(), _list.end(), ostream_iterator<char>(cout, " "));
    cout << endl;
    system("pause");
    return 0;
}
Yandex
Объявления
28.09.2011, 21:06     АТД список. Перемещение заданного элемента на первую позицию
Ответ Создать тему
Опции темы

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