Написать программу, реализующую стек на примере массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, уже не знаю, что делать. Основной косяк как связать указатели и переменные, так же при вызове функций ошибка в параметрах. Задание: Написать программу, реализующую стек на примере массива S[N] и стандартные операции со стеком на примере функций push(), pop(), peek(), clear(). Программа должна иметь следующую файловую структуру: 1. файл stack.h 2. файл stack.с 3. файл main.с 1.Файл stack.h
int Empty(int * stackPtr, int * top);
int Full (int * stackPtr, int * top);
int Push (int * stackPtr, int * top, int val);
int Pop  (int * stackPtr, int * top);
int Peek (int * stackPtr, int * top);
void Clear(int * stackPtr, int * top);
int Empty(int * stackPtr, int * top);
int Full (int * stackPtr, int * top);
int Push (int * stackPtr, int * top, int val);
int Pop  (int * stackPtr, int * top);
int Peek (int * stackPtr, int * top);
void Clear(int * stackPtr, int * top);
2.Файл stack.c
#include <stdio.h>
#include "stack.h"
/* реализация функций Empty(), Full(), Push(), Pop(), Peek(), Clear()*/

int Empty(int * stackPtr, int * top)
{
    if (top[S] == -1)
       return 1;
    else    
       return 0;
}
 
int Full(int * stackPtr, int * top)
{
    if (top[S] == N)
       return 1;
    else
       return 0;
}
 
int Push(int * stackPtr, int * top, int val)
{
        if (Full(int * stackPtr, int * top))
             printf ("Error! Stack is full\n");
        else {
             printf ("Input value of the element\n");
             scanf("%d",&x)
             top[S] = top[S] + 1;
             S[top[S]] = x;
              }
             return 0;
}
 
int Pop(int *stackPtr, int *top)
{
    if (StackEmpty(int *stackPtr, int *top))
        printf ("Error! Stack is empty\n");
        else {  
             x= S[top[S]];
             top[S] = top[S] - 1;
            return x;
}           
 
int Peek(int *stackPtr, int *top)
{   if (StackEmpty(int *stackPtr, int *top))
        printf ("Error! Stack is empty\n");
        else {  
             x= S[top[S]];
             return x;
    }
 
void Clear(int *stackPtr, int *top)
{
    if (StackEmpty(int *stackPtr, int *top))
        printf ("Stack is empty\n");
    else    
        top[S] = -1;
}
3.Файл main.c:
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
 
int main(int argc, char *argv[])
{   int S[10], *stackPtr, *top;
    char a;
    int x=0, y=0;
//  t=&top;
    top = (int *)malloc(sizeof(int));
    //int *S;
    S = (int *)calloc(10, sizeof(int));
    *top=-1;
            
    do{  
    system("cls");
    printf( "----Menu----\n1.Push in the stack\n2.Pop from the stack\n3.Peek the last element\n4.Clear the stack\n");
    scanf("%d",&x);
    
    switch(x)
    {
    case 1: Push (S, y); break;
          
    case 2: Pop  (S); break;
          
    case 3: Peek (S); break;
          
    case 4: Clear(S); break;
          
    default:
    printf ("Wrong entry\n");
    }       
    
    printf ("To continue, click a\n");
    scanf ("%s",a);
}
    while (a =='a');  
 
  system("PAUSE");  
  return 0;
}

Решение задачи: «Написать программу, реализующую стек на примере массива»

textual
Листинг программы
#include <stdio.h>
#include "intstack.h"
 
void flush_input(void) {
    char c;
 
    while ( scanf("%c", &c) == 1 && c != '\n' )
        ;
}
 
int menu(void) {
    int ret;
 
    printf("\n0 - exit\n1 - push\n2 - pop\n3 - top\n> ");
    if ( scanf("%d", &ret) != 1 ) {
        flush_input();
        return -1;
    }
 
    return ret;
}
 
int main(void) {
    int value, done;
    size_t size;
    intstack_t * stack;
 
    printf("Stack size: ");
    if ( scanf("%lu", &size) != 1 || ! size ) {
        fprintf(stderr, "Wrong input!\n");
        return 1;
    }
 
    if ( ! ( stack = intstack_new(size) ) ) {
        fprintf(stderr, "Memory error!\n");
        return 1;
    }
 
    done = 0;
    while ( ! done ) {
        switch( menu() ) {
        case 0:
            printf("Bye!");
            done = 1;
            break;
        case 1:
            printf("Value: ");
            if ( scanf("%d", &value) != 1 ) {
                fprintf(stderr, "Wrong input!\n");
                flush_input();
            }
            else if ( intstack_push(stack, value) )
                printf("Stack is full!\n");
            else
                printf("OK\n");
            break;
        case 2:
            if ( intstack_pop(stack, &value) )
                printf("Stack is empty!\n");
            else
                printf("Got value %d\n", value);
            break;
        case 3:
            if ( intstack_top(stack, &value) )
                printf("Stack is empty!\n");
            else
                printf("Top value: %d\n", value);
            break;
        default:
            fprintf(stderr, "Unknown command!\n");
            break;
        }
    }
 
    intstack_destroy(stack);
    return 0;
}

Объяснение кода листинга программы

В данном коде реализована программа для работы со стеком на примере массива. Список функций и их назначение:

  1. void flush_input(void) - очищает ввод пользователя, позволяет избежать влияния предыдущего ввода на последующий;
  2. int menu(void) - выводит на экран меню программы и ожидает ввода от пользователя;
  3. int main(void) - является точкой входа в программу, инициализирует и управляет работой остальных функций;
  4. intstack_t * stack - указатель на структуру данных, представляющую стек;
  5. intstack_new(size_t size) - создает новый экземпляр стека указанного размера;
  6. intstack_push(stack_t * stack, int value) - добавляет новый элемент в стек;
  7. intstack_pop(stack_t stack, int value) - удаляет и возвращает последний добавленный элемент;
  8. intstack_top(stack_t stack, int value) - возвращает последний добавленный элемент без удаления;
  9. intstack_destroy(stack_t * stack) - освобождает память, занятую стеком. Код программы:
  10. 0 - exit - завершает программу;
  11. 1 - push - добавляет новый элемент в стек;
  12. 2 - pop - удаляет и возвращает последний добавленный элемент;
  13. 3 - top - возвращает последний добавленный элемент без удаления;
  14. Stack size: - запрос на ввод размера стека;
  15. Value: - запрос на ввод значения для добавления в стек;
  16. Got value 123 - вывод значения, которое было добавлено в стек и затем удалено;
  17. Stack is empty! - вывод сообщения о том, что стек пуст;
  18. OK - подтверждение успешного добавления элемента в стек;
  19. Stack is full! - вывод сообщения о том, что стек полон;
  20. Bye! - завершающее сообщение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы