С++ указатели

программирование C++ С++ указатели

Мне надо упорядочить элементы в списке
как мне сделать перестановку двух элементов в двусвязном списке?
Ниже весь код, возможно там куча ошибок(главная в перестановке элементов и в итоге сортировка не работает), подскажите пожалуйста, уже мозги не варят=(

struct alphabet
{
float probability;
char symbol;
};

alphabet *inputAL(float probability, char symbol)
{
alphabet *rez = new alphabet;
rez->probability=probability;
rez->symbol=symbol;
return rez;
}

struct element
{
alphabet *data;
element *next, *pref;
};

class list
{
private:
element *first;
public:

list()
{
first=NULL;
};

void swap(int i, int j)
{
element *buf1=getByPos(i);
element *buf2=getByPos(j);
element *buf3=buf1->next;
element *buf4=buf1->pref;
buf1->pref=buf2;
buf1->next=buf2->next;
buf2->next=buf3;
buf2->pref=buf4;
//cout<<buf1->data->probability<<" "<<buf2->data->probability<<"\n";
};

element *getByPos(int pos)
{
int i=0;
element *buf=first;
for (i=0; i<pos; i++)
buf=buf->next;
return buf;
};

int count()
{
int count=1;
element *buf=first;
while (buf=buf->next)
count++;
return count;
};

element *last()
{
element *last=first;
if (first)
while (last->next)
{
last=last->next;
};
return last;
};

void add(alphabet *value)
{
element *_last;
_last=last();
if (_last)
{
_last->next=new element;
_last->next->pref=_last;
_last=_last->next;
_last->next=NULL;
_last->data=value;
}
else
{
first=new element;
first->next=NULL;
first->data=value;
first->pref=first;
};
};
void sort()
{
int i=0,j;
element *min=first;
for (j=0; j<count(); j++)
{
min=first;
for (i=j; i<count(); i++)
{
if(min->next)
if (min->data->probability>min->next->data->probability)
{
min=min->next;
swap(j,i);
};
};
printL();
cout<<"\n";
};
};

void printL()
{
element *buf=first;
while(buf)
{
cout<<buf->data->probability<<" ";
buf=buf->next;
};
};
};
Ответы:
На будущее совет - никогда не вставляйте сюда код, в таком мясе разбираться никто не будет. Если уж сильно надо, давайте ссылки на кодпад. А я спать.
ваш swap
element *buf1=getByPos(i);
element *buf2=getByPos(j);
element *buf3=buf1->next;
element *buf4=buf1->pref;
buf1->pref=buf2;
buf1->next=buf2->next;
buf2->next=buf3;
buf2->pref=buf4;


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.