Реализовать простой стек, с функциями добавления и удаления элементов - C (СИ)

  1. Реализовать простой стек на си, с функциями добавления в стек и удаления из него, а также проверки пустой ли стек.


textual

Код к задаче: «Реализовать простой стек, с функциями добавления и удаления элементов - C (СИ)»

#include <stdlib.h>
#include <stdio.h>
 
#define STACK_MAX_CAPACITY 200
 
struct Stack_of_char {  
  char data[STACK_MAX_CAPACITY]; 
  int dest_idx;                  
};
 
void stack_of_char_init(struct Stack_of_char* st) {
  st->dest_idx = 0;
}
 
int stack_of_char_push(struct Stack_of_char* st, char ch) {  
  if(st->dest_idx == STACK_MAX_CAPACITY) 
    return 0;
    
  st->data[st->dest_idx] = ch;
  ++st->dest_idx;
  
  return 1;
}
 
int stack_of_char_pop(struct Stack_of_char* st, char* pch) {
  if(st->dest_idx == 0)
    return 0;  
  
  --st->dest_idx;
  if(pch != NULL)
    *pch = st->data[st->dest_idx];      
  
  return 1;
}
 
int stack_of_char_empty(const struct Stack_of_char* st) {
  return st->dest_idx == 0;
}
 
int main(void) {
  char ch;
  struct Stack_of_char st;
  
  stack_of_char_init(&st);    
  for(ch = 'z'; ch >= 'a'; --ch)
    stack_of_char_push(&st, ch);
  
  while(!stack_of_char_empty(&st)) {
    stack_of_char_pop(&st, &ch);
    putchar(ch);
  }
  putchar('\n');
  
  return EXIT_SUCCESS;
}

СДЕЛАЙТЕ РЕПОСТ

6   голосов, оценка 3.667 из 5



Похожие ответы
  1. Необходимо модифицировать данную функции, чтобы она указывала на индекс последнего вхождения слова в строке. То есть, если строка - Cyber Forum is Cyber Forum, а искомое слова Cyber, то она не должна выдавать 0.C1 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 int searchWord(const char str[81], const char word[21]) /* Входные данные: str – исходная строка word – искомое  слово   Выходные данные: возвращаемое значение - индекс первого вхождения искомого слова в строку; возвращает -1, если слово не найдено */ {     int i = 0;     while (str)     {           const char* s1 = str;         const char* p1 = word;           while (*s1 == *p1)         {               s1++; p1++;             if (*p1 == '\0' || *s1 == '\0')break;           }         if (*p1 == '\0') return i;         if (*s1 == '\0') return -1;         str++;         i++;     }     return -1; }

  1. C1 2 3 4 5 6 7 8 #define el_resolveVALength(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N   #define ELPP_VARIADIC_FUNC_MSVC(variadicFunction, variadicArgs) variadicFunction variadicArgs   #define ELPP_VARIADIC_FUNC_MSVC_RUN(variadicFunction, ...) ELPP_VARIADIC_FUNC_MSVC(variadicFunction, (__VA_ARGS__))   #define el_getVALength(...) ELPP_VARIADIC_FUNC_MSVC_RUN(el_resolveVALength, 0, ## __VA_ARGS__,\ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)как el_getVALength узнает кол-во аргументов и какую роль там играет '##'?

  1. День добрый. Я - первокурсник, не так давно начал изучать язык С. И вот выдали мне тему курсового проекта: реализация игрового приложения "Пятнашки" в консоли на языке С. Квадратные глаза и n-ное кол-во кирпичей - вот так можно описать мое состояние. Срок сдачи приближается и я решился обратиться за помощью. Посоветуйте, с чего вообще начинать, какую литературу и какие темы изучать? И, может быть, у кого-нибудь завалялась готовая программа? =) Заранее спасибо.

  1. Добрый день всем, я для саморазвития решил изучить основы Си, сам я очень далек от программирования. Сейчас прохожу небольшой курс, выполняю практическую работу, но столкнулся с проблемой которую у меня не выходит решить. Изначально мне даны четыре программы: Кликните здесь для просмотра всего текста C1 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 generate.c /**  * generate.c  *  * Computer Science 50  * Problem Set 3  *  * Generates pseudorandom numbers in [0,LIMIT), one per line.  *  * Usage: generate n [s]  *  * where n is number of pseudorandom numbers to print  * and s is an optional seed  */   #define _XOPEN_SOURCE   #include #include #include #include   // constant #define LIMIT 65536   int main(int argc, string argv[]) {     // TODO: comment me     if (argc != 2 && argc != 3)     {         printf("Usage: generate n [s]\n");         return 1;     }       // TODO: comment me     int n = atoi(argv[1]);       // TODO: comment me     if (argc == 3)     {         srand48((long int) atoi(argv[2]));     }     else     {         srand48((long int) time(NULL));     }       // TODO: comment me     for (int i = 0; i < n; i++)     {         printf("%i\n", (int) (drand48() * LIMIT));     }       // success     return 0; }     find.c /**  * find.c  *  * Computer Science 50  * Problem Set 3  *  * Prompts user for as many as MAX values until EOF is reached,  * then proceeds to search that "haystack" of values for given needle.  *  * Usage: ./find needle  *  * where needle is the value to find in a haystack of values  */         #include #include #include   #include "helpers.h"   // maximum amount of hay const int MAX = 65536;   int main(int argc, string argv[]) {     // ensure proper usage     if (argc != 2)     {         printf("Usage: ./find needle\n");         return -1;     }       // remember needle     int needle = atoi(argv[1]);       // fill haystack     int size;     int haystack[MAX];     for (size = 0; size < MAX; size++)     {         // wait for hay until EOF         printf("\nhaystack[%i] = ", size);         int straw = GetInt();                 if (straw == INT_MAX)         {             break;         }               // add hay to stack                 haystack[size] = straw;             }     printf("\n");       // sort the haystack     sort(haystack, size);       // try to find needle in haystack     if (search(needle, haystack, size))     {         printf("\nFound needle in haystack!\n\n");         return 0;     }     else     {         printf("\nDidn't find needle in haystack.\n\n");         return 1;     } }     helpers.c /**  * helpers.c  *  * Computer Science 50  * Problem Set 3  *  * Helper functions for Problem Set 3.  */         #include   #include "helpers.h"   /**  * Returns true if value is in array of n values, else false.  */ bool search(int value, int values[], int n) {     // TODO: implement a searching algorithm     return false; }   /**  * Sorts array of n values.  */ void sort(int values[], int n) {     // TODO: implement an O(n^2) sorting algorithm     return; }     helpers.h /**  * helpers.h  *  * Computer Science 50  * Problem Set 3  *  * Helper functions for Problem Set 3.  */   #include   /**  * Returns true if value is in array of n values, else false.  */ bool search(int value, int values[], int n);   /**  * Sorts array of n values.  */ void sort(int values[], int n); В программе helpers.c, я должен написать функцию сортировки, и функцию линейного поиска. Это я и попытался сделать, вот так выглядит мой код: Кликните здесь для просмотра всего текста C1 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 helpers.c #include #include "helpers.h"       bool search(int value, int values[], int n) {     for (int i = 0; i < n; i++)    {       if (values[n] == value)       {        return true;       }       return false;          } }     void sort(int values[], int n) {     int temp;     int ctr = 0;     int didswap;       do     {         didswap = 0;         for (int i = 0; i < n; i++)         {             if (values[i] > values[i + 1])             {                 temp = values[i];                 values[i] = values[i + 1];                 values[i + 1] = temp;                 didswap = 1;             }         }                 ctr = ctr + 1;     }     while (ctr < n && didswap != 0);     } Остальные программы я не видоизменял. При попытке, проверить программу в автоматическим тестировании я вижу такой результат Я не очень понимаю, где ошибся, может быть кто знает?Еще мне не очень понятно, почему при запуске команды - "./generate 10 50 | ./find 127", я получаю пустой массив. Ведь , как я понимаю должно было сгенерироваться 10 псевдослучайных чисел, и переместиться в программу find, и заполнить массив из haystack[]. а я получаю: Кликните здесь для просмотра всего текста

  1. Всем здравствуйте. Программа заменяет max и min целочисленного массива средним арифметическим оставшихся чисел. Помогите, как мне вывести новый массив, в котором min и max заменены? Заранее спасибо. C1 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 #include   int main()   {       float A[20],min,max,s,c,y;     int i,N1,N2,n;     printf("Введите размерность массива==>");     scanf("%d",&n);     printf("Введите массив: \r\n");       for(i = 0;i

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

  1. Необходимо реализовать хеш-таблицу для DNS сервера

  1. Здравствуйте,требуется на основе алгоритмов прямого поиска; Кнута, Морриса и Пратта; Боуера и Мура реализовать алгоритмы поиска подстроки в строке. Самый простой способ. Спасибо

  1. Добрый день, необходимо реализовать через отдельные функции ввод динамического массива и нахождение его минимального элемента. Буду благодарен за любую помощь.

  1. Реализовать алгоритм сортировки модифицированным методом простого выбора.