Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сортировка списка .. не фурычит что то


Автор: Jugger 13.3.2011, 21:16
Вот такой код
Он работает, но список не сортирует, а выводит как есть
Функции ввода вывода и max работают как надо, а вот sort безрезультатно
В чём ошибка ?

Код

#include "stdafx.h"
#include "iostream"
using namespace std;
#include <stdlib.h>
#define n 10





      
    class element {
    public : 
        element(int q){
            x=q;
            next=0;
        };
        int x;
        element* next;
        ~element();
    } ;

    element * perv, * posl;

    void addtolist(int x){
        element * t =posl;

             posl=new element (x);
                  
              if(perv==0) perv=posl;
               else t->next=posl;
        
    };

    void printlist(element * perv){
        element * t =perv;
        while(t!=0){
            cout<<" " <<t->x;
            t=t->next;
        };
    } ;

    int max(element * perv){
        element * t=perv;
        int max=-32768;
        while(t!=0){
            max=t->x>max?t->x:max;
            t=t->next;
        
        };
        return max;
    };

    void sort(element * perv){
        
        int rc,i=0,tmp,m;
        element * t;
        rc=8*sizeof(element);
        while(i+1<(posl-perv)/rc){
            t=perv+i*rc;
            tmp=t->x;
            m=max(perv+i*rc);
            t->x=m;
            
            while(t!=0){

                t=t->next;                    
                if(t->x=m) { 
                    t->x=tmp; 
                    break;
                };
                
                
            };
            
            i++;
        };
        
        };

    int main(){
        system("cls");
        int e,i=0;
        while (i<n){
              cin>>e;
              
              addtolist(e);
          i++;
        };

        sort(perv);

        printlist(perv);

                system("getmac && pause");
        return 0;

    };

Автор: volatile 13.3.2011, 23:29
Цитата(Jugger @  13.3.2011,  21:16 Найти цитируемый пост)
Он работает, но список не сортирует

Сомневаюсь что он работает.

Цитата(Jugger @  13.3.2011,  21:16 Найти цитируемый пост)
       ~element();

У вас неслинкуется.
Деструктор объявлен, но тела нет.

Дальше смотреть не стал, так как неровные отступы очень затрудняют дело.

Автор: Суровый 14.3.2011, 14:42
Jugger, для начала: 1) пожалуйста, не ставьте ";" после каждой закрывающей фигурной скобки, это неверный подход.
2) Или укажите тело деструктора или вообще уберите строчку ~element();
3) Честно скажу, что полностью алгоритм не разбирал, но в функции sort есть условие if(t->x=m) - может в этом ошибка?  smile 

Автор: xvr 28.3.2011, 19:21
Цитата(Jugger @  13.3.2011,  21:16 Найти цитируемый пост)
Код

        while(i+1<(posl-perv)/rc){
            t=perv+i*rc;
            m=max(perv+i*rc);
Это все работать не будет. Элементы списка располагаются в памяти не смежно (это все же не массив), так что передвигаться по списку прибавляя что то к указателю на элемент нельзя


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)