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

Как осуществить сортировку вставками в списках? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Напечатать те слова массива, в которых нет повторяющихся букв http://www.cyberforum.ru/cpp-beginners/thread179274.html
Привет! Помогите мне, пожалуйста, написать программу. Задание: Задан массив слов. Напечатать те слова этого массива в которых нет повторяющихся букв. Пишите, пожалуйста, на языке С++. Не дублируйте темы - это нарушение правил форума!
C++ Построение магического квадрата Помогите построить магический квадрат (магическим квадратом n-ого порядка называется квадрат размерами nxn со вписанными в него натуральными числами от 1 до n2 так, что сумма их по всем горизонталям, вертикалям и диагоналям квадрата равна одному и тому же числу.) http://www.cyberforum.ru/cpp-beginners/thread179268.html
последовательность чисел b1,...bn C++
Дана последовательность чисел b1,...bn. Получить квадратную матрицу порядка n, элементами которой являются числа b1,...,bn^n, расположенные по схеме:
C++ Указатели
Нифига не догоняю тему про указатели, есть книга по C/C++ но там не очень понятным языком написано Киньте плиз ссылку на хороший мануал по указателям с нуля, я читал что если не понял эту тему то дальше язык не поймешь?
C++ Возможно ли выводить текст подчеркнутым (зачеркнутым, курсивом)? http://www.cyberforum.ru/cpp-beginners/thread179246.html
Привет всем. Поискал на форуме - не нашел. Скажите пожалуйста, возможно ли выводить текст на экран в с++ подчеркнутым (зачеркнутым, курсивом и тд.)? Задание - отсортировать массив с интерпретацией, для того, чтобы видеть работу сортировщика. Сортировку я сделал, хочу сделать интерпретацию - как-нибудь выделять элементы, которые будут меняться. Как это можно сделать?
C++ Форматированный вывод значения переменной Подскажите пожалуйста как мне вывести значение переменной функцией std::cout чтоб ей отводилось определенное кол-во знаков. Мне необходимо например вывести вот так std::cout <<"== "<<a<<" == "<<x_<<" == "<<y<<" == "<<z<<" ==\n"; чтоб каждой переменной отводилось например по 7 символов? подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
21.10.2010, 02:39     Как осуществить сортировку вставками в списках?
вставками - не вставками, но список сортируется...
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct STR {
    char * text;
    struct STR * next;
} str_t;
 
str_t * new_str(const char * buf){
    str_t * st;
 
    if ( ( st = (str_t *)malloc(sizeof(str_t)) ) == NULL )
        return NULL;
    if ( ( st->text = strdup(buf) ) == NULL ){
        free(st);
        return NULL;
    }
    st->next = NULL;
    
    return st;
}
 
str_t * del_str(str_t * st){
    str_t * ret = st->next;
    free(st->text);
    free(st);
    return ret;
}
 
typedef struct {
    str_t * first;
    str_t * last;
} list_t;
 
list_t * new_list(void){
    list_t * list;
    
    if ( ( list = (list_t *)malloc(sizeof(list_t)) ) == NULL )
        return NULL;
    list->first = NULL;
    list->last = NULL;
    
    return list;
}
 
int push_str(list_t * list, const char * buf){
    str_t * st;
    
    if ( ( st = new_str(buf) ) == NULL )
        return -1;
    if ( ! list->first )
        list->first = st;
    else 
        list->last->next = st;
    list->last = st;
    
    return 0;
}
 
void del_list(list_t * list){
    while ( list->first = del_str(list->first) )
        ;
    free(list);
}
 
void swap_strings(char ** a, char ** b){
    char * tmp = *a;
    *a = *b;
    *b = tmp;
}
 
str_t * min_str(str_t * start){
    str_t * cur, * min;
    
    min = start;
    for ( cur = start->next; cur; cur = cur->next )
        if ( strcmp(cur->text, min->text) < 0 )
            min = cur;
    return min;
}
 
void sort_list(list_t * list){
    str_t * st, * min;
    for ( st = list->first; st->next; st = st->next )
        if ( ( min = min_str(st) ) != st )
            swap_strings(&st->text, &min->text);
}
 
void print_list(const list_t * list){
    const str_t * st;
    for ( st = list->first; st; st = st->next )
        printf("%s\n", st->text);
}
 
int empty_list(list_t * list){
    return list->first == NULL;
}
 
int main(void){
    char buf[BUFSIZ], * p;
    list_t * list;
    
    if ( ( list = new_list() ) == NULL ){
        fprintf(stderr, "Can't create a new list!\n");
        exit(1);
    }
    
    printf("Enter some strings (empty - finish):\n");
    while ( printf("> ") && fgets(buf, BUFSIZ, stdin) ){
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( ! *buf )
            break;
        if ( push_str(list, buf) ){
            fprintf(stderr, "Can't add string to list!\n");
            del_list(list);
            exit(1);
        }
    }
    
    if ( empty_list(list) ){
        fprintf(stderr, "List is empty!\n");
        exit(1);
    }
    
    printf("\nSorted ascendant:\n");
    sort_list(list);
    print_list(list);
    
    del_list(list);
    exit(0);
}
 
Текущее время: 19:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru