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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
#1

Cортировка двусвязного списка - C++

07.04.2011, 23:25. Просмотров 1286. Ответов 3
Метки нет (Все метки)

Ну, в общем задание в названии. Нужно отсортировать двусвязный список, методом пузырька. Сортировку-то я эту знаю. Но вот проблема, я не могу разобраться, как в двусвязном списке перейти к следующему элементу, и как сделать указатель на текущий. Да и вообще с двусвязными как-то не ладится)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Element                              
{ 
    Element* Prev;                          
    Element* Next;                            
    void*    Data;   
    int val;
    Element(Element* prev, void* data,  Element* next) 
    {
        Prev = prev;
        Data = data;
        Next = next;
    }
 
};
Сюда нужно что-то добавлять? Прошу помощи хоть в чём)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 23:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cортировка двусвязного списка (C++):

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

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка - C++
Здравствуйте! Возникла проблема с программой. Тема: "Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

Реверс двусвязного списка - C++
Столкнулся с задачей написать функцию реверса двусвязного списка. Часа 3 сушил себе мозг с копиями указателей, получилось что надо хранить...

Создание двусвязного списка - C++
Не понимаю как его создать. И как сделать стандартные операции над списком(удаление, добавление и т.д). Сколько сайтов переползал, все...

Итератор двусвязного списка - C++
Добрый день. Проблема: Есть итератор для двусвязного списка. Реализован метод вывода списка с головы, но не получается реализовать метод...

Удаление элемента из двусвязного списка - C++
Надо удалить элемент из двусвязного списка, если выполняется условие (2013-(current->god)<3). Я пытаюсь как могу, но что то все равно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
07.04.2011, 23:40 #2
А тебе надо самому реализовать список?

Есть же готовый двухсвязный список <list> в STL. А вот по нему хелп.
А тут несколько методов сортировки из STL
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
07.04.2011, 23:49  [ТС] #3
Мне нужно самому. Я просто не совсем понимаю строение двусвязного списка, это обычный список, только доступ к элементам производится по другому? Т.е. через два указателя.
sav241
5 / 5 / 0
Регистрация: 04.04.2011
Сообщений: 37
08.04.2011, 00:14 #4
вот те прога,список двунаправленый, создается чтением данных из файла, по ходу создания сортируется методом вставки, прога рабочая.
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
105
106
107
108
109
110
111
112
113
114
115
// AnketaNewSypper.cpp : Defines the entry point for the console application.
//
#include <fstream>
#include "StdAfx.h"
#include <iostream>
#include "stdafx.h"
#include <Windows.h>
#include <math.h>
#include <string.h>
#include <fstream>
using namespace std;
 
struct anketa {
            char *fam;
            unsigned int god;
            anketa *next;
            anketa *over;
};
anketa *first=NULL;
    
ifstream file1("file.txt");
 
  anketa *getData(){ //создание нового элемента списка, считывание его с клавиатуры
      
      anketa *a=new anketa;
          if(!file1.eof()){
          a->fam= new char [255];
          file1 >> a->fam;   
          }else{delete a;return NULL; }
      
      if(!file1.eof()){
          file1 >> a->god;
          }else{delete a; return NULL; }
     
    a->next=NULL;
    a->over=NULL;
    return a;
}
void createList1(){ //создает сортированный список по году, сортируется по ходу создания
    anketa *newEl; // создание нового элемента, считывание с клавиатуры,операция присваивания
    do{
  newEl=getData();
 
  if(newEl==NULL)break;
    if (!first) {first=newEl;}
    else {
         if (newEl->god<first->god) {
            newEl->next=first;
            first=newEl;
 
         }
         else { //вставка элемента
             anketa *curr=first;
             BOOL ins = FALSE;
             while (curr->next!=NULL) {
                 if (curr->next->god>newEl->god) {
                     newEl->next=curr->next;
                     curr->next=newEl;
                     newEl->over=curr;//sdgsg
                     ins = true;
                     break;
                 }
                 curr=curr->next;
             }
             if (!ins) {
                 curr->next = newEl;
                 newEl->over=curr;//sdgsg
             }
         }  
   }
 
    }while(true);
}
 
 
 
void show () {
    anketa *curr=first;
    cout<<"-------------------"<<endl;
    while (curr){
         cout <<curr->fam<<" "<<curr->god<<endl;
         curr=curr->next;
    }
}
 
void drop (){
    anketa *curr=first;
    anketa *delEl;
    while (curr) {
        delEl=curr;
        curr=curr->next;
        delete delEl;
    }
 
}
 
void main(){
 
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     int t;
     cout<<"1-для сортировки по дате, , 3 - для показа списка"<<endl;
     cin>>t;
     if(t==1){
     createList1();
     cin>>t;
     }
  
     if(t==3){
         show();
     }      
 
     drop ();
     file1.close();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 00:14
Привет! Вот еще темы с ответами:

Удаление элемента из двусвязного списка - C++
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже работает, но после удаления любого элемента:...

Удаление элемента из двусвязного списка - C++
Собственно, в коде все рабочее, кроме удаления. После ввода элемента выдает ошибку 0xC0000005. Где-то напутал с выделением памяти? ...

Добавление в конец двусвязного списка - C++
Помогите найти ошибку в коде: не работает добавление в конец. Список формируется добавлением в начало! Функция добавления: ...

Удаление из двусвязного циклического списка - C++
Начал реализовывать структуру данных - Фибоначчиевы кучи. Столкнулся с проблемой при написании функции удаления минимального элемента....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.04.2011, 00:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru