Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "stack.h"
- int main() {
- // Создать стек
- Stack* stack = create_stack();
- // Добавить элементы в стек
- push(stack, 10);
- push(stack, 20);
- push(stack, 30);
- // Проверить, пуст ли стек
- if (is_empty(stack)) {
- printf("Стек пуст.\n");
- } else {
- printf("Стек не пуст.\n");
- }
- // Удалить элементы из стека
- int popped_value = pop(stack);
- printf("Удаленное значение: %d\n", popped_value);
- popped_value = pop(stack);
- printf("Удаленное значение: %d\n", popped_value);
- // Проверить, пуст ли стек
- if (is_empty(stack)) {
- printf("Стек пуст.\n");
- } else {
- printf("Стек не пуст.\n");
- }
- // Уничтожить стек
- destroy_stack(stack);
- return 0;
- }
- // file stack.h
- #ifndef STACK_H
- #define STACK_H
- #include <stdlib.h>
- typedef struct node {
- int data;
- struct node* next;
- } Node;
- typedef struct stack {
- Node* head;
- Node* tail;
- int size;
- } Stack;
- // Функция создания стека
- Stack* create_stack();
- // Функция добавления элемента в стек
- void push(Stack* stack, int value);
- // Функция удаления элемента из стека
- int pop(Stack* stack);
- // Функция проверки, пуст ли стек
- int is_empty(Stack* stack);
- // Функция уничтожения стека
- void destroy_stack(Stack* stack);
- #endif
- // file stack.c
- #include <stdlib.h>
- #include "stack.h"
- // Функция создания стека
- Stack* create_stack() {
- Stack* stack = (Stack*)malloc(sizeof(Stack));
- stack->head = NULL;
- stack->tail = NULL;
- stack->size = 0;
- return stack;
- }
- // Функция добавления элемента в стек
- void push(Stack* stack, int value) {
- Node* new_node = (Node*)malloc(sizeof(Node));
- new_node->data = value;
- new_node->next = NULL;
- if (stack->head == NULL) {
- stack->head = new_node;
- stack->tail = new_node;
- } else {
- stack->tail->next = new_node;
- stack->tail = new_node;
- }
- stack->size++;
- }
- // Функция удаления элемента из стека
- int pop(Stack* stack) {
- if (stack->head == NULL) {
- return -1; // Стек пуст
- }
- Node* popped_node = stack->head;
- int popped_value = popped_node->data;
- stack->head = stack->head->next;
- if (stack->head == NULL) {
- stack->tail = NULL;
- }
- free(popped_node);
- stack->size--;
- return popped_value;
- }
- // Функция проверки, пуст ли стек
- int is_empty(Stack* stack) {
- return stack->size == 0;
- }
- // Функция уничтожения стека
- void destroy_stack(Stack* stack) {
- while (stack->head != NULL) {
- Node* current_node = stack->head;
- stack->head = stack->head->next;
- free(current_node);
- }
- stack->tail = NULL;
- stack->size = 0;
- free(stack);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement