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

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

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

Author24 — интернет-сервис помощи студентам
Ребятки, хелпаните! Через указатели желательно, надо не по простому варианту) Написать списочек, в который мы вводим данные, а на выходе у нас введенные данные, но в обратном порядке.. Я как понял надо еще один список создать для данных, которые выходять в обратном порядке?!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2010, 13:12
Ответы с готовыми решениями:

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

Имеется список женихов и список невест. Объединить эти списки в список пар с учетом требований партнерам
Имеется список женихов и список невест. Каждая запись списка содержит пол, имя, возраст, рост, вес,...

программа которая берет список и создает список другой из этого же списка + тот же список без последнего элемента
надо написать программу которая берет список и создает список другой из этого же списка + тот же...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые...

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

Добавлено через 3 часа 46 минут
Ребяяяяята!! ПОМОГИТЕ пожалуйста!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
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
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
20.08.2010, 19:42  [ТС] 6
Благодарю! А можно поподробнее про две строчки! Что за */int pop/* и */#define BUF_LEN 32/*

Расскажите об этом, если не сложно.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
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
бжни
2473 / 1684 / 135
Регистрация: 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
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
20.08.2010, 20:12  [ТС] 9
Спасибо за помощь!
0
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
23.08.2010, 15:10  [ТС] 10
Возникла одна мысль по поводу этого же задания, как такое же сделать, НО используя рекурсивную функцию... Если не сложно,расскажите.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
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
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
24.08.2010, 14:03  [ТС] 12
Спасибо!
Полностью с Вами согласен, но всетаки мысль возникла))) надо материально обставить ее))

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

Скажите пожалуйста, как можно вывести строку,а не цифры... Т.е. мы вводим "abcd" в функция возвращает "dcba" примерно тоже что и с числами.. мне сказали писать через *char, не используя std::string
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
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
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
24.08.2010, 15:29  [ТС] 14
Ох, спасибо! Выручаете меня постоянно!

Только я немного не понял,что в данном случае итератив?!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
24.08.2010, 15:47 15
Цитата Сообщение от doommer Посмотреть сообщение
Только я немного не понял,что в данном случае итератив?
две функции делают по сути одно и то же, только одна рекурсивная (сама себя вызывает), а вторая итеративная (в цикле элементы массива перебирает)...
1
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
24.08.2010, 16:11  [ТС] 16
Ааааа... Т.е. если нам например нужно передать функции строку и символ, а она должна вернуть есть ли такой символ или нет... то тут использовать итеративную?! Я просто немного не разобрался сам, что от меня собственно хотят) особенно с символом)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
24.08.2010, 16:32 17
Цитата Сообщение от doommer Посмотреть сообщение
Я просто немного не разобрался сам, что от меня собственно хотят
Вы уж определитесь как-нибудь, а то я Вам так всю стандартную библиотеку в рекурсивной версии перепишу...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
char * rec_strchr(const char * s, char c){
    return ( *s == '\0' ) ? NULL : ( *s == c ) ? (char*)s : rec_strchr(++s, c);
}
 
int main(void){
    char * text = "This is a good day to die.";
    char c, * found;
 
    printf("String: %s\n", text);
    printf("Character to find in: ");
    scanf("%c", &c);
    if ( found = rec_strchr(text, c) )
        printf("Yes, it's a %d(th) from begin.\n", found - text + 1);
    else
        printf("Character '%c' not found.\n", c);
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
25.08.2010, 15:05  [ТС] 18
Полностью с Вами согласен! Надо взяться за голову)

Добавлено через 21 час 52 минуты
Что-то меня обругали за эти программки)

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;
}
Сказали, что не так понял задание( "Надо было написать функцию, которой дают строку, а она ее переворачивает. Тут такой функции нет. Тут есть программа, которая что-то читает и пишет."
Budda подскажите,плз, как исправить?
Вторую программку переделал уже, а вот с этой какая-то морока.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
25.08.2010, 17:12 19
Цитата Сообщение от 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
#include <stdio.h>
 
char * strreverse(char * s){
    char * pHead, * pTail, c;
 
    for ( pTail = s; *pTail; ++pTail )
        ;
    for ( --pTail, pHead = s; pHead < pTail; ++pHead, --pTail ){
        c = *pHead;
        *pHead = *pTail;
        *pTail = c;
    }
 
    return s;
}
 
int main(void){
    char buf[BUFSIZ];
 
    printf("String:  ");
    scanf("%[^\n]%*c", buf);
    printf("Reverse: %s\n", strreverse(buf));
 
    return 0;
}
Цитата Сообщение от doommer Посмотреть сообщение
Написать списочек, в который мы вводим данные, а на выходе у нас введенные данные, но в обратном порядке..
На будующее - списком в С обычно называют набор из однотипных данных (структур), последовательно связанных между собой указателями.
1
1 / 1 / 0
Регистрация: 17.08.2010
Сообщений: 22
29.08.2010, 16:21  [ТС] 20
Здравствуйте, Будда)

Я нашел мааааленькую ошибочку)) В этой программульке функция меняет данную строку, должна ее не трогать, а просто выводить новую строку...
Перепишите пожалуйста)
0
29.08.2010, 16:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2010, 16:21
Помогаю со студенческими работами здесь

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые ...

Составить базу данных об учащихся. Составить программу позволяющую выводить полный список учащихся, список выбравших предмет, список лучших учеников
Составить базу данных об учащихся, предусмотрев поля: Ф.И.О., предметы по выбору, экзаменационные...

Разделить исходный список на два списка: список чисел из диапазона [a,b] и список чисел не из заданного диапазона
Создайте приложение, которое разделит исходный список из вещественных чисел на два списка: список...

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


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

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

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