С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
staket
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 4
#1

Построить список - C++

14.11.2011, 19:31. Просмотров 390. Ответов 3
Метки нет (Все метки)

Дано задание
Построить список , исключить первые и n элементы , расположенные после
1. первого отрицательного
2. после наибольшего

Добавлено через 2 минуты
Написал код, но не знаю правильно ли? ну там еще пару действий добавил на всякий случай, чтоб ничего еще не сказали на лету сделать!

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
134
135
136
137
#include<iostream.h>
#include<conio.h>
 
struct node {
    int info;
    node *next, *prev;
    };
 
void add_L(node*&first, node*&last, int x) {
    node*p = new node;
    p->info = x;
    p->prev = 0;
    p->next = first;
    if(first == 0) last = 0;
        else first->prev = p;
    first = p;
    }
 
void add_R(node*&first, node*&last, int x) {
    node*p = new node;
    p->info = x;
    p->next = 0;
    p->prev = last;
    if(last) last->next = p;
        else first = p;
    last = p;
    }
 
void make(node*&first, node*&last) {
    first = 0;
    last = 0;
    int x;
    do {
        cout<<"\n VVesti nomer: \n";
        cin>>x;
        add_R(first, last, x);
        cout<<"\n Continue ? Y/N \n";
        //cout<<"\nFirst: "<<first<<"\nLast: "<<last;
        } while(getch()!='n');
    }
 
void output(node*first, char t[]) {
    if(first == 0) cout<<"\n List empty \n";
        else {
            node*p = first;
            cout<<t;
            while(p) {
                cout<<p->info<<"  ";
                p = p->next;
                }
            cout<<endl;
            }
    }
 
void insert(node*&last, node*p, int x) {
    node*t = new node;
    t->info = x;
    t->next = p->next;
    t->prev = p;
    if(p == last) last = t;
        else p->next->prev = t;
        p->next = t;
    }
 
void remove(node*&first, node*&last, int &x, node*p) {
    if(p == first) first = p->next;
        else p->prev->next = p->next;
    if(p == last) last = p->prev;
        else p->next->prev = p->prev;
    x = p->info;
    delete p;
    }
void sort(node*first, node*last) {
    node*p = first, *t, *pmin;
    while(p != last) {
        pmin = p;
        t = p->next;
        while(t) {
            if(t->info < pmin->info) pmin = t;
            t = t->next;
            }
        int z = p->info;
        p->info = pmin->info;
        pmin->info = z;
        p = p->next;
        }
    }
 
void main() {
    clrscr();
    int x, z, sum = 0;
    node*first, *last, *p, *a;
    make(first, last);
    output(first, "\n Spisok: \n");
    //Delete 1 pozitive
    p = first;
    while (p!=0&&p->info<0){
    p=p->next;
    }
    if(p==0) cout<<"\n Net polzitelnih \n";
        else{ remove (first, last, x, p);
        sum = sum + x;
        output(first,"\n Spisok posle udaleniya 1  polozitelnogo \n");
        }
    //Add novogo elementa posle min
    p = first;
    a = first;
    z = p->info;
    while(p!=0) {
        p = p->next;
        if(z>p->info) {
            z = p->info;
            a = p;
            }
    }
    cout<<"\n Novii Element ";
    cin>>x;
    insert(last, a, x);
    output(first,"\n Spisok posle dobavlenya\n");
 
    //Udalenie vseh polozitelnih
    p = first;
    while(p!=0) {
        if(p->info>0) {
            remove(first, last, x, p);
            sum = sum + x;
            p = p->prev;
            }
        p = p->next;
    }
    output(first,"\n Spisok posle udaleniya vseh polozitel'nih\n");
 
    sort(first,last);
    output(first,"\n Spisok posle sortirovki\n");
 
    getch();
    }
Добавлено через 3 часа 56 минут
Пожалуйста проверьте кто понимает - чувствую что я не удовлетворил условию задачи ! покажите , где это может быть и как исправить!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построить список (C++):

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) - C++
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов. Вот такая задачка : Программа...

Построить связной список - C++
Построить связной список, содержащий в качестве данных информацию о студентах: № зачетной книжки, Фамилия, Имя, Отчество, Дата рождения,...

Построить двусвязный список из данного - C++
Разработать программу, которая создает список, элементами которого являются действительные числа r1,r2...rn. Строит список, элементами...

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

Построить список из положительных элементов исходного списка - C++
Предположим, что уже построен и задан указателем P двунаправленный список, элементами которого являются вещественные числа. Написать...

Построить список из положительных элементов исходного списка - C++
Предположим, что уже построен и задан указателем P однонап*равленный список, элементами которого являются вещественные чис*ла. Написать...

3
alkagolik
Заблокирован
14.11.2011, 22:31 #2
staket, может перед первым отрицательным и после наибольшего? или на выбор?
1
staket
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 4
14.11.2011, 22:48  [ТС] #3
Там два задания:
1.удалить ячейку после максимального
2.удалить ячейку после первого отрицательного


Мне бы просто понять
кукую функцию ввести в прогу , чтоб она сделал это. ТАк как подумав , что моя реализация удаления первой положительной ячейки после отрицательного никак не подходит к заданию, НИПАНЯТНО

void main() {
clrscr();
int x, z, sum = 0;
node*first, *last, *p, *a;
make(first, last);
output(first, "\n Spisok: \n");
//Delete 1 pozitive
p = first;
while (p!=0&&p->info<0){
p=p->next;
}
if(p==0) cout<<"\n Net polzitelnih \n";
else{ remove (first, last, x, p);
sum = sum + x;
output(first,"\n Spisok posle udaleniya 1 polozitelnogo \n");
}

Добавлено через 1 минуту
если можно в проге это просто показать ! ОТДЕЛЬНЫМ ЦВЕТОВ (например фиолетовым - что понятно было что за функция и зачем она). Ну 1я и 2я

Добавлено через 10 минут
П.С. Помогите Плиз - необходимо как обычно еще вчера , а я так и не допетрил((
0
alkagolik
Заблокирован
15.11.2011, 13:30 #4
вот почти готовая программа. надо добавить функцию удаления элемента после отрицательного, по желанию сделать инициализацию stdin и обработать исключение "если список пустой"
код программы
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 <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct node
{
    int x;
    struct node *next;
};
 
struct node *create_list()
{
    struct node *tmp;
 
    tmp = (struct node*) malloc (sizeof(struct node));
    if (!tmp )
        exit ( -1 );
 
    tmp->x = rand() % 100 - 50;
    tmp->next = 0;
 
    return tmp;
}
 
void add_elements(struct node *pcurrent, int n)
{
    struct node *tmp;
 
    while (n--)
    {
        tmp = (struct node*) malloc(sizeof(struct node));
        if ( !tmp )
            exit ( -1 );
        tmp->x = rand() % 100 - 50;
        pcurrent->next = tmp;
        pcurrent = pcurrent->next;
    }
    pcurrent->next = 0;
}
 
void free_list(struct node *phead)
{
    struct node *tmp = phead, *current = phead;
 
    while (current)
    {
        tmp = current;
        current = current->next;
        free(tmp);
    }
}
 
void print_list(struct node *pcurrent, struct node *phead)
{
    pcurrent = phead;
 
    while(pcurrent)
    {
        printf("%d ", pcurrent->x);
        pcurrent = pcurrent->next;
    }
}
 
struct node *findandel_max(struct node *pcurrent, struct node *phead)
{
    struct node *tmp;
    int max = -1000;
    pcurrent = phead;
 
    while(pcurrent)
    {
        if ( max < (pcurrent->x) )
            max = pcurrent->x;
        pcurrent = pcurrent->next;
    }
 
    pcurrent = phead;
    while ( (pcurrent->x) != max )
        pcurrent = pcurrent->next;
 
    if (pcurrent == phead)
    {
        phead = pcurrent->next;
        free(pcurrent);
    }
    else if ((pcurrent->next) == 0)
        puts("максимальный элемент списка последний в списке");
    else
    {
        tmp = (pcurrent->next)->next;
        free(pcurrent->next);
        pcurrent->next = tmp;
    }
 
    return phead;
}
 
int main()
{
    struct node *head, *current;
    srand(time(0));
 
    head = create_list();
    current = head;
    add_elements(current, 15);
    print_list(current, head);
    puts("");
    head = findandel_max(current, head);
    print_list(current, head);
    
    free_list(head);
    return 0;
}
1
15.11.2011, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 13:30
Привет! Вот еще темы с ответами:

Построить линейный список из нескольких динамических переменных - C++
Построить линейный список из нескольких динамических переменных, содержащих вводимые целые числа. Вычислить количество совпадающих...

Построить односвязный список из входной последовательности чисел - C++
Построить односвязный список из входной последовательности чисел. При построении в списке располагать сначала узлы, содержащие простые...

Построить двусвязный список сведений о высших учебных заведениях - C++
Построить двусвязный список сведений о высших учебных заведениях: название, город, количество студентов. Второй указатель указывает на...

Построить односвязный список из входных последовательностей натуральный чисел - C++
Построить односвязный список из входных послед-ей натуральный чисел удалить из списка узлы содержащие простые числа, есть у кого какие...


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

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

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