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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
#1

Реверсированный список - C++

20.08.2010, 13:12. Просмотров 1824. Ответов 23
Метки нет (Все метки)

Ребятки, хелпаните! Через указатели желательно, надо не по простому варианту) Написать списочек, в который мы вводим данные, а на выходе у нас введенные данные, но в обратном порядке.. Я как понял надо еще один список создать для данных, которые выходять в обратном порядке?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2010, 13:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реверсированный список (C++):

Создать список L3 из элементов, входящих и в список L1 и в список L2 - C++
создать список л3 из элементов входящих и в список л1 и в список л2

3 класса: список, стек(как список), очередь(как список) - C++
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление, удаление. Использовать при обращении указатель...

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

list. Cоздать список из результатов(с массивами), а потом просмотреть весь список - C++
Подскажите пожалуйста как мне создать список из моих результатов(с массивами) а потом просмотреть весь список, вот код который имеется ...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список - C++
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Вводится число N. Создать список его делителей и вывести список на экран - C++
#include<iostream> #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> using namespace std; struct...

23
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
20.08.2010, 13:19 #2
Ничего не понял.... Что означает "на выходе" ??? На выходе - чего?
0
Dzhej-Dzhej
Заблокирован
20.08.2010, 13:31 #3
а может это стeк?
0
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
20.08.2010, 17:21  [ТС] #4
Ок,сори,видимо плохо написал... Еще раз... Нужно написать программульку, которая читает список и печатает его в обратном порядке, вот как то так... Через указатели(

Добавлено через 3 часа 46 минут
Ребяяяяята!! ПОМОГИТЕ пожалуйста!
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
20.08.2010, 18:37 #5
Цитата Сообщение от doommer Посмотреть сообщение
вот как то так... Через указатели
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct NODE {
    int val;
    struct NODE * next;
} node_t;
 
int push(node_t ** top, int val){
    node_t * n;
    
    if ( ( n = (node_t*)malloc(sizeof(node_t)) ) == NULL )
        return 1;
    n->val = val;
    n->next = *top;
    *top = n;
    return 0;
}
 
int pop(node_t ** top, int * val){
    node_t * next;
    
    if ( ! top || ! *top )
        return 1;
    *val = (*top)->val;
    next = (*top)->next;
    free ( *top );
    *top = next;
    return 0;
}
 
#define BUF_LEN 32
 
int main(void){
    char buf[BUF_LEN];
    int val;
    node_t * stack;
    
    stack = NULL;
    printf("Enter some numbers. Empty string - finish.\n");
    while ( printf("> ") && fgets(buf, BUF_LEN, stdin) && *buf != '\n' ){
        if ( push(&stack, atoi(buf)) ){
            fprintf(stderr, "Memory error!\n");
            exit(EXIT_FAILURE);
        }
    }
    
    if ( ! stack ){
        fprintf(stderr, "Stack is empty!\n");
        exit(EXIT_FAILURE);
    }
    
    while ( stack ){
        if ( pop(&stack, &val) ){
            fprintf(stderr, "Stack error!\n");
            exit(EXIT_FAILURE);
        }
        printf("> %d\n", val);
    }
    
    exit(EXIT_SUCCESS);
}
Реверсированный список
1
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
20.08.2010, 19:42  [ТС] #6
Благодарю! А можно поподробнее про две строчки! Что за */int pop/* и */#define BUF_LEN 32/*

Расскажите об этом, если не сложно.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
20.08.2010, 19:50 #7
Цитата Сообщение от doommer Посмотреть сообщение
#define BUF_LEN 32
константа для определения размера буфера (читайте про макроопределения)

Цитата Сообщение от doommer Посмотреть сообщение
int pop
функции push() и pop() - традиционные функции для работы со стеком. push() помещает значение в стек, pop() - извлекает зеачение из стека. В моём варианте обе они возвращают результат работы: 0 - удачно, 1 - нет. Кстати, функцию push() для кошерности чуть подправить надо
C
1
2
3
4
5
6
7
8
9
10
11
12
int push(node_t ** top, int val){
    node_t * n;
    
    if ( ! top )
        return 1;
    if ( ( n = (node_t*)malloc(sizeof(node_t)) ) == NULL )
        return 1;
    n->val = val;
    n->next = *top;
    *top = n;
    return 0;
}
1
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.08.2010, 20:11 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <list>
#include <iterator>
#include <iostream>
 
using namespace std;
 
int main(){
  list<int> l;
  copy( istream_iterator<int>(cin), istream_iterator<int>(), back_inserter( l ) );
  copy( l.rbegin(), l.rend(), ostream_iterator<int>(cout," ") );
  return 0;
}
2
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
20.08.2010, 20:12  [ТС] #9
Спасибо за помощь!
0
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
23.08.2010, 15:10  [ТС] #10
Возникла одна мысль по поводу этого же задания, как такое же сделать, НО используя рекурсивную функцию... Если не сложно,расскажите.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
23.08.2010, 15:46 #11
Цитата Сообщение от doommer Посмотреть сообщение
как такое же сделать, НО используя рекурсивную функцию...
Не совсем политкорректно, но работает. Да и незачем в принципе так делать, если количество входных данных не известно - стек-то не резиновый...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
void reverse_numbers_print(void){
    int val;
    if ( scanf("%d", &val) != 1 )
        return;
    reverse_numbers_print();
    printf("%d\n", val);
}
 
int main(void){
    printf("Enter some numbers one by row. The single sign symbol - finish.\n");
    reverse_numbers_print();
    return 0;
}
Реверсированный список
1
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
24.08.2010, 14:03  [ТС] #12
Спасибо!
Полностью с Вами согласен, но всетаки мысль возникла))) надо материально обставить ее))

Добавлено через 20 часов 42 минуты
easybudda!

Скажите пожалуйста, как можно вывести строку,а не цифры... Т.е. мы вводим "abcd" в функция возвращает "dcba" примерно тоже что и с числами.. мне сказали писать через *char, не используя std::string
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
24.08.2010, 14:58 #13
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
#include <stdio.h>
 
void rec_reverse(const char * s){
    if ( ! *s )
        return;
    rec_reverse(s + 1);
    putchar(*s);
}
 
void it_reverse(const char * s){
    const char * p;
    for ( p = s; *p; ++p )
        ;
    while ( p > s )
        putchar(*--p);
}
 
int main(void){
    char buf[BUFSIZ];
 
    printf("String: ");
    scanf("%[^\n]%*c", buf);
    printf("Recursive: ");
    rec_reverse(buf);
    printf("\nIterative: ");
    it_reverse(buf);
    printf("\n");
 
    return 0;
}
1
doommer
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
24.08.2010, 15:29  [ТС] #14
Ох, спасибо! Выручаете меня постоянно!

Только я немного не понял,что в данном случае итератив?!
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
24.08.2010, 15:47 #15
Цитата Сообщение от doommer Посмотреть сообщение
Только я немного не понял,что в данном случае итератив?
две функции делают по сути одно и то же, только одна рекурсивная (сама себя вызывает), а вторая итеративная (в цикле элементы массива перебирает)...
1
24.08.2010, 15:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2010, 15:47
Привет! Вот еще темы с ответами:

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

Упорядочить список студентов по среднему баллу и вывести весь список - C++
форумчане,выдает ошибку :( столько маюсь с задачей уже #include &lt;vcl.h&gt; #include &lt;stdio.h&gt; #pragma hdrstop /*Упорядочить список...

Описать функцию, которая будет проверять входит ли список l1 в список l2 - C++
Здравствуйте, нужно Описать функцию, которая будет проверять входит ли список l1 в список l2. Ни как не могу понять как это сделать. ...

Создать список, после каждого отрицательного числа вставить в список 0 - C++
задание такое, создать список, после каждого отрицательного числа вставить в список 0. я кое-что тут пытался делать: #include...


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

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

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