Написать программу, реализующую стек на примере массива - C (СИ)
Формулировка задачи:
Помогите пожалуйста, уже не знаю, что делать. Основной косяк как связать указатели и переменные, так же при вызове функций ошибка в параметрах.
Задание: Написать программу, реализующую стек на примере массива S[N] и стандартные операции со стеком на примере функций push(), pop(), peek(), clear(). Программа должна иметь следующую файловую структуру:
1. файл stack.h 2. файл stack.с 3. файл main.с
1.Файл stack.h
2.Файл stack.c
3.Файл main.c:
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);
#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; }
#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 = (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; }
Объяснение кода листинга программы
В данном коде реализована программа для работы со стеком на примере массива. Список функций и их назначение:
- void flush_input(void) - очищает ввод пользователя, позволяет избежать влияния предыдущего ввода на последующий;
- int menu(void) - выводит на экран меню программы и ожидает ввода от пользователя;
- int main(void) - является точкой входа в программу, инициализирует и управляет работой остальных функций;
- intstack_t * stack - указатель на структуру данных, представляющую стек;
- intstack_new(size_t size) - создает новый экземпляр стека указанного размера;
- intstack_push(stack_t * stack, int value) - добавляет новый элемент в стек;
- intstack_pop(stack_t stack, int value) - удаляет и возвращает последний добавленный элемент;
- intstack_top(stack_t stack, int value) - возвращает последний добавленный элемент без удаления;
- intstack_destroy(stack_t * stack) - освобождает память, занятую стеком. Код программы:
- 0 - exit - завершает программу;
- 1 - push - добавляет новый элемент в стек;
- 2 - pop - удаляет и возвращает последний добавленный элемент;
- 3 - top - возвращает последний добавленный элемент без удаления;
- Stack size: - запрос на ввод размера стека;
- Value: - запрос на ввод значения для добавления в стек;
- Got value 123 - вывод значения, которое было добавлено в стек и затем удалено;
- Stack is empty! - вывод сообщения о том, что стек пуст;
- OK - подтверждение успешного добавления элемента в стек;
- Stack is full! - вывод сообщения о том, что стек полон;
- Bye! - завершающее сообщение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д