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

Переделать код из массива в списки - C++

Восстановить пароль Регистрация
 
PRIKOL
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 64
04.11.2010, 11:09     Переделать код из массива в списки #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
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<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<fstream.h>
#include<time.h>
#include<stdio.h>
#include<windows.h>
#include<errno.h>
//*************************************************************************
/* П/п русификации текста */
char bufRus[255];
char* rus(const char* text)
{
  CharToOem(text,bufRus);
  return bufRus;
}
//*************************************************************************
main()
{
int i,j,n,c,d,k,m;
char name1[255],name2[255];
        cout<<rus("Название файла откуда взять массив:")<<endl;
        cin>>name1;
        cout<<rus("Название файла куда поместить результат:")<<endl;
        cin>>name2;
 
        struct tm *ptr;
        time_t lt;
        lt=time(NULL);
        ptr=localtime(&lt); //Текущая дата и время
 
        errno=0;
        fstream fp1(name1,ios::in);
        if(!fp1) { cout<<rus("Ошибка ")<<strerror(errno); getch(); return 0;}// Открытие файла и проверка на ошибки
        fp1>>d;
        errno=0;
        fstream fp2(name2,ios::out|ios::trunc);
        if(!fp2) { cout<<rus("Ошибка ")<<strerror(errno); getch(); return 0;}// Открытие файла и проверка на ошибки
 
        for(d;d>0;d--)
        {
                clock_t tStart;
                tStart=clock();         //Старт счетчика времени
                fp1>>n;  //Колличество элементов массива
                int *a=new int[n];
                int *p=new int[n];
                m=n;
                for(i=0;i<n;i++)
                        {
                                fp1>>a[i]; //Элементы массива
                                p[i]=a[i];
                        }
                cout<<endl;
                for(i=0;i<n;i++)
                cout<<setw(4)<<a[i];
                c=0;
                k=0;
                do
                {
                  for(i=0;i<n;i++)
                  {
                    for(j=i+1;j<n;j++)
                    {
                      if(a[j]==a[i])
                      {
                        c=j;
                        while(c<n)
                        {
                          a[c]=a[c+1];
                          c++;
                        }
                        n=n--;
                      }
                    }
                  }
                  k++;
                }
                while(k<2);
                fp2<<"Название:                     "<<"Внешний интерфейс"<<endl
                   <<"Дата/время запуска программы: "<<asctime(ptr)
                   <<"Входные данные:               "<<endl
                   <<"Колличество элементов:        "<<m<<endl
                   <<"Массив:                       ";
                for(i=0;i<m;i++)                      
                        fp2<<p[i]<<" ";                 
                fp2<<endl                           
                   <<"Выходные данные:              "<<endl
                   <<"Количество:                   "<<n<<endl
                   <<"Массив:                       ";
                for(i=0;i<n;i++)
                        fp2<<a[i]<<" ";
                fp2<<endl;
                fp2<<"Время:"<<endl
                   <<"Время работы программы:           "
                   <<((float)(clock() - tStart)/CLOCKS_PER_SEC)*1000<<" мСек"<<endl //Остановка и вывод времени
                   <<endl<<endl;
                delete(a);
                delete(p); //Освобождение памяти
        }
        fp2.close();
        fp1.close();        //Удаления файловых переменных
        getch();
return 0;
}
Данную программу нужно переделать, используя уже не массив, а список.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 11:09     Переделать код из массива в списки
Посмотрите здесь:

C++ Переделать Код!
C++ Переделать код с С на С++
C++ Переделать код!
Объединить 2 массива: переделать код с использованием функций C++
C++ Переделать код из C# в C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
04.11.2010, 11:54     Переделать код из массива в списки #2
Для таких нужд есть стандартный алгоритм unique и контейнер list
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.11.2010, 14:42     Переделать код из массива в списки #3
Цитата Сообщение от Manjak Посмотреть сообщение
Для таких нужд есть стандартный алгоритм unique и контейнер list
Проще set использовать - заодно и отсортируется само...
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
04.11.2010, 14:48     Переделать код из массива в списки #4
Ему же список нужен, к тому же программа использующая сет будет работать медленнее так как сет выполняет сортировку после каждой вставки элемента
PRIKOL
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 64
04.11.2010, 22:57  [ТС]     Переделать код из массива в списки #5
Просто не понимаю как переделать код (
Не понимаю списки (
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 23:55     Переделать код из массива в списки #6
Цитата Сообщение от Manjak Посмотреть сообщение
Ему же список нужен, к тому же программа использующая сет будет работать медленнее так как сет выполняет сортировку после каждой вставки элемента
Это не факт. Более вероятна реализация std::set в виде дерева поиска.
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
05.11.2010, 00:08     Переделать код из массива в списки #7
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Это не факт. Более вероятна реализация std::set в виде дерева поиска.
Этот аспект не стандартизирован, но по требованиям к сложности операций, сет таки реализуется как красно-черное дерево (Про сортировку я таки попутал)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<int> lNumbers;
 
    copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(lNumbers));
    lNumbers.sort  ();
    lNumbers.unique();
    copy(lNumbers.begin(), lNumbers.end(), ostream_iterator<int>(cout, " "));
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2010, 20:04     Переделать код из массива в списки
Еще ссылки по теме:

C++ Переделать код
Связанные списки (переделать программу) C++
C++ Переделать код С на С++

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

Или воспользуйтесь поиском по форуму:
PRIKOL
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 64
10.11.2010, 20:04  [ТС]     Переделать код из массива в списки #8
блин не понимаю как можно переделать под списки (

q=first
q=q->next
Yandex
Объявления
10.11.2010, 20:04     Переделать код из массива в списки
Ответ Создать тему
Опции темы

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