Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
El2
1 / 1 / 0
Регистрация: 24.03.2013
Сообщений: 25
1

Создать стек вещественных чисел на основе статического массива

22.09.2013, 17:02. Просмотров 1150. Ответов 3
Метки нет (Все метки)

Создать стек вещественных чисел на основе статического массива. Реализовать методы : Добавить элемент, удалить элемент, вершина стека.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 17:02
Ответы с готовыми решениями:

Создать стек вещественных чисел на основе статического массива
Почему не получается добавить элементы в стек? Помогите пожалуйста. #include <stdio.h> ...

Создать стек целых чисел на основе статического массива.
Создать стек целых чисел на основе статического массива. Реализовать методы : Добавить элемент,...

Создать стек записи Спортсмен на основе статического массива типа запись
Добрый вечер! Помогите пожалуйста решить задачку: Создать стек записи Спортсмен на основе...

Стек на основе статического массива
Здравствуйте! Помогите пожалуйста выполнить задание. Сама уже весь форум облазила и нужного не...

Стек записи на основе статического массива типа запись
Добрый вечер! Помогите пожалуйста выполнить задание: Создать стек записи Спортсмен на основе...

3
anmartex
...
1752 / 1229 / 923
Регистрация: 12.02.2013
Сообщений: 2,021
23.09.2013, 09:31 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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node_t
{
    float value;
    struct node_t* next;
}   TNode;
 
//----------------------------------------------------------------------------
TNode* Push(TNode** stack, float value)
{
    TNode* node = malloc(sizeof(TNode));
    node->value = value;
    node->next = *stack;
    
    *stack = node;
    
    return *stack;
}
//----------------------------------------------------------------------------
float Pop(TNode** stack)
{
    TNode* node = *stack;
    float value = node->value;
    
    *stack = node->next;
    
    free(node);
    
    return value;
}
//----------------------------------------------------------------------------
float Top(const TNode** stack)
{
    return (*stack)->value;
}
//----------------------------------------------------------------------------
 
int main()
{
    const float CValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    const size_t CValuesSize = sizeof(CValues) / sizeof(*CValues);
    
    TNode* stack = NULL;
    size_t i;
    
    for (i = 0; i < CValuesSize; ++i)
    {
        Push(&stack, CValues[i]);
    }
    
    while (stack)
    {
        printf("%.2f ", Pop(&stack));
    }
    
    return 0;
}
1
РУУУУУУУУУУУУУС
2 / 2 / 4
Регистрация: 12.04.2013
Сообщений: 66
07.10.2013, 22:21 3
это я так понимаю объявление статического массива?
Цитата Сообщение от anmartex Посмотреть сообщение
const float CValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
а вот это что?
Цитата Сообщение от anmartex Посмотреть сообщение
const size_t CValuesSize = sizeof(CValues) / sizeof(*CValues);
это указатель головы указывающий нулл?
C
1
TNode* stack = NULL;
а вот это что?
C
1
size_t i; // я так понимаю это объявление переменной i, а вот какого она типа?
вот это функция на добавление элемента:
C
1
2
3
4
5
6
7
8
9
10
TNode* Push(TNode** stack, float value)
{
    TNode* node = malloc(sizeof(TNode)); //выделение памяти для нового узла
    node->value = value; // задание значения, которое нужно ввести(верно?) 
    node->next = *stack; // указатель на след. элемент(узел)???
    
    *stack = node; // а вот это что? тоже указатель на след. узел? или это делает след. узел текущим?
    
    return *stack; // возвращаем стэк
}
вот эта функция на проверку вершины:
C
1
2
3
4
5
6
7
8
9
10
11
float Pop(TNode** stack)
{
    TNode* node = *stack;   //что это?
    float value = node->value;  //это что?
    
    *stack = node->next;  // сделать след.элемент текущим? или нет?
    
    free(node); // освободили дин.память
    
    return value; //вернули значение
}
это функция для вывода нашего массива?
C
1
2
3
4
float Top(const TNode** stack)
{
    return (*stack)->value;
}
0
anmartex
...
1752 / 1229 / 923
Регистрация: 12.02.2013
Сообщений: 2,021
08.10.2013, 04:02 4
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
это я так понимаю объявление статического массива?
Не путайте статический массив с константным. Это как раз константный.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
а вот это что?
C
1
const size_t CValuesSize = sizeof(CValues) / sizeof(*CValues);
Это определение длины массива, т.е. количества элементов.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
это указатель головы указывающий нулл?
C
1
TNode* stack = NULL;
Это пустой стек, т.е. указатель равный NULL.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
а вот это что?
size_t i; // я так понимаю это объявление переменной i, а вот какого она типа?
Как какого типа? Там же написано - size_t. Это не атомарный тип данных, и обычно эквивалентен unsigned int.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
node->value = value; // задание значения, которое нужно ввести(верно?)
Да
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
node->next = *stack; // указатель на след. элемент(узел)???
Да
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
*stack = node; // а вот это что? тоже указатель на след. узел? или это делает след. узел текущим?
Нет, это вершиной стека становится новый (только что созданный) узел.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
TNode* node = *stack; //что это?
Ввод дополнительного указателя, который теперь тоже ссылается на вершину стека.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
float value = node->value; //это что?
Так ведь это же функция Pop. Основным назначением этой функции является извлечение элемент из списка. Но, т.к. вы должны будете его физически удалить, то предварительно же нужно куда-то сохранить его значение?
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
*stack = node->next; // сделать след.элемент текущим? или нет?
Спускаемся к следующему элемент, ведь верхний элемент будет удалён.
Цитата Сообщение от РУУУУУУУУУУУУУС Посмотреть сообщение
это функция для вывода нашего массива?
Нет, эта функция должна быть по заданию:
Цитата Сообщение от El2 Посмотреть сообщение
Реализовать методы : ..., вершина стека.
так вот это как раз вершина стека
1
08.10.2013, 04:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 04:02

Стек на основе статического массива: вставить число, учитывая сортировку
всем привет. помогите решить проблему с методом pushOrder(). Его суть в том, что бы вставить число...

Создать стек из вещественных чисел
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр...

Создать стек из вещественных чисел и определить макс элемент
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр...


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

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

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