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

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

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

Создать стек вещественных чисел на основе статического массива. Реализовать методы : Добавить элемент, удалить элемент, вершина стека.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2013, 17:02
Ответы с готовыми решениями:

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

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

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

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

3
...
1791 / 1259 / 931
Регистрация: 12.02.2013
Сообщений: 2,058
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
...
1791 / 1259 / 931
Регистрация: 12.02.2013
Сообщений: 2,058
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2013, 04:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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