0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 24
1

Ошибка в бинарной сортировке односвязного списка

10.04.2018, 20:10. Показов 375. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Моя проблема заключается в том, что при вводе любых значений в функцию сортировки на выводе получается -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
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <cstdlib>
using namespace std;
 
 
 
 
struct list
{
    int field; // поле данных
    struct list *ptr; // указатель на следующий элемент
};
struct list * init(int a) // а- значение первого узла
{
    struct list *lst;
    // выделение пам¤ти под корень списка
    lst = (struct list*)malloc(sizeof(struct list));
    lst->field = a;
    lst->ptr = NULL; // это последний узел списка
    return(lst);
}
struct list * addelem(list *lst, int number)
{
    struct list *temp, *p;
    temp = (struct list*)malloc(sizeof(list));
    p = lst->ptr; // сохранение указател¤ на следующий узел
    lst->ptr = temp; // предыдущий узел указывает на создаваемый
    temp->field = number; // сохранение пол¤ данных добавл¤емого узла
    temp->ptr = p; // созданный узел указывает на следующий элемент
    return(temp);
}
void listprint(list *lst)
{
    struct list *p;
    p = lst;
    do {
        cout <<p->field; // вывод значени¤ элемента p
        p = p->ptr; // переход к следующему узлу
    } while (p != NULL);
}
struct list * sort( struct list *root )
{
    struct list *new_root = NULL;
 
    while ( root != NULL )
    {
        struct list *node = root;
        root = root->ptr;
 
        if ( new_root == NULL || node->field < new_root->field )
        {
            node->ptr = new_root;
            new_root = node;
        }
        else
        {
            struct list *current = new_root;
            while ( current->ptr != NULL && !( node->field < current->ptr->field ) )
            {
                current = current->ptr;
            }
 
            node->ptr = current->ptr;
            current->ptr = node;
        }
    }
    listprint(new_root);
    return new_root;
}
int SearchBinary(int left,int right,int key, list* lst)
{
    int mid;
    while (1)
    {list *p=lst;
        mid = (left + right) / 2;
        for(int i = 0; i < mid-1; ++i){
            p->field=lst->field;
            p = lst -> ptr;
        }
        if (key < (p -> field))       // если искомое меньше значени¤ в ¤чейке
            right = mid - 1;      // смещаем правую границу поиска
        else if (key > (p -> field))  // если искомое больше значени¤ в ¤чейке
            left = mid + 1;    // смещаем левую границу поиска
        else                       // иначе (значени¤ равны)
            return mid;           // функци¤ возвращает индекс ¤чейки
 
        if (left > right)          // если границы сомкнулись
            return -1;
 
 
    }
}
int main(){
    list* lst = init(5);
    int n;
    cout << "vvedite kolvo elementov: ";
    cin >> n;
    for(int i = 1; i < n; ++i){
        int value;
        cout << "Vvedite " << i+1 << "-y element: ";
        cin >> value;
        addelem(lst,value);
    }
    sort(lst);
    int key;
    cout << endl;
    cout<<"Vvedite key: ";
    cin>>key;
    int index;
    index = SearchBinary(0,n,key,lst);
    cout << "index: " << index << endl;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2018, 20:10
Ответы с готовыми решениями:

Ошибка при сортировке односвязного списка методом пузырька
Здравствуйте, возникла проблема. Нужно отсортировать элементы структуры односвязного списка. ...

Гайд по сортировке односвязного линейного списка
Посоветуйте пожалуйста толковый гайд по сортировке. Уже столько всего перерыл, прочитал, но понять...

Ошибка при удалении из односвязного списка
Написал код, но при удалении элемента из списка у которого есть значение 2 выдаёт ошибку. Помогите...

Ошибка вывода односвязного списка на экран
Сначала считал односвязный список из файла, но теперь какая то странная ошибка - односвязный список...

0
10.04.2018, 20:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2018, 20:10
Помогаю со студенческими работами здесь

Добавление элемента в конец односвязного списка - ошибка
Всем привет! Собственно, задача такая: написать функцию, добавляющую элемент в конец связного...

Не могу понять в чем ошибка: реализация односвязного списка
#include &lt;iostream&gt; using namespace std; struct list { int key; list *next; }; void...

Удаление элементов из односвязного списка списка
Привет всем знатокам, суровым программистам и профессионалам своего дела. Засел за реализацией...

Сортировка односвязного списка
Помогите пишу курсач сделал все ф-ции кроме сортировки в голову не приходит как что не пробовал без...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru