Форум программистов, компьютерный форум 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++ Для действительной матрицы размера m x n определить числа b0, b1,…, bm Для действительной матрицы размера m x n определить числа b0, b1,…, bm равные соответственно: суммам элементов строк. Матрица размещается в динамической памяти, а все операции обработки выполняются... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
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);
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru