Функция для формирования стека - C (СИ)
Формулировка задачи:
#include<stdio.h> #include<conio.h> struct node {int val; node*next;}; void vvod(); void main() { clrscr(); void vvod(); } void vvod() { node*stk,*first; int el; stk=NULL; scanf("%d",&el); while(el!=NULL) { first=new(node); first->val=el; first->next=stk; stk=first; scanf("%d",&el); } }
Решение задачи: «Функция для формирования стека»
textual
Листинг программы
#include <assert.h> #include <stdlib.h> #include <stdio.h> typedef int value_type; typedef struct node_tag { struct node_tag *next; value_type value; } node_t, *pnode_t; typedef pnode_t stack_t, *pstack_t; int empty(pstack_t head) { assert(head); return (*head == NULL); } int push(pstack_t head, value_type value) { pnode_t node = NULL; assert(head); if((node = (pnode_t)malloc(sizeof(*node))) == NULL) { fprintf(stderr, "stack overflow\n"); return -1; } node->next = empty(head) ? NULL : *head; node->value = value; *head = node; return 0; } int pop(pstack_t head) { pnode_t node = *head; assert(head); if(empty(head)) { fprintf(stderr, "stack underflow\n"); return -1; } *head = (*head)->next; free(node); return 0; } value_type top(pstack_t head) { assert(head); if(empty(head)) { fprintf(stderr, "stack underflow\n"); return 0; } return (*head)->value; } int main() { stack_t s = NULL; int i = 0; for(i = 0; i < 205; ++i) { if(push(&s, i + 1) != 0) exit(1); } while(!empty(&s)) { printf("%d -> ", top(&s)); if(pop(&s) != 0) exit(1); } printf("\b\b\b \n"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , - Определяем типы данных для узла стека и указателя на узел стека
- Создаем typedef для представления стека
- Определяем пустоту стека (пустой стек)
- Функция для добавления элемента в стек (последовательность push)
- Функция для удаления элемента из стека (последовательность pop)
- Функция для получения значения верхнего элемента стека (топ)
- В функции main создаем стек и инициализируем его как пустой
- Запускаем цикл, который заполняет стек элементами от 1 до 204
- После заполнения стека, запускаем цикл, который поочередно извлекает элементы из стека и выводит их на экран
- В конце программы выводим дополнительный символ
- Завершаем программу возвратом значения 0, что означает успешное выполнение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д