Программная реализация стека на основе массива
Пример 14.1 Файл stack.h #include < stdio.h> #include < stdlib.h> #include < malloc.h> #include < conio.h> ////////////////////// Stack for char typedef struct {char *stack; int head; int size; } STACK; int Init(STACK* Stack, int nSize); char Pop(STACK* Stack); int Push(STACK* Stack, char cElement); void Clear(STACK* Stack); int GetSize(STACK* Stack); void Free(STACK* Stack);
#include " stack.h" ////////////////////// Stack for char /////////////////////////////////////////////// int Init(STACK* Stack, int nSize) {Stack-> stack = (char*)malloc(nSize); if (Stack-> stack == NULL) return -1; Stack-> size = nSize; Stack-> head = 0; return nSize; } /////////////////////////////////////////////// char Pop(STACK* Stack) {if (Stack-> head == 0) return 0; return Stack-> stack[--Stack-> head]; } /////////////////////////////////////////////// int Push(STACK* Stack, char cElement) {if (Stack-> head == Stack-> size) return -1; Stack-> stack[Stack-> head++] = cElement; return 1; } /////////////////////////////////////////////// void Clear(STACK* Stack) {Stack-> head = 0; } /////////////////////////////////////////////// int GetSize(STACK* Stack) { return Stack-> head; } /////////////////////////////////////////////// void Free(STACK* Stack) { free(Stack-> stack); }
void main() {STACK A; Init(& A, 8); Push(& A, 'J'); Push(& A, 'F'); char c = Pop(& A); ... Варианты индивидуальных заданий 1. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавить 6 элементов. Удалить и вывести на экран 2 элемента. 2. Создать стек для целых (положительных и отрицательных) чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести с экрана 6 элементов. При вводе чисел в стек попадают только отрицательные элементы. Вывести все элементы стека. 3. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Ввести с экрана 6 элементов. Удалить 2 элемента. Вывести размер стека. 4. Создать стек для целых (положительных и отрицательных) чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Вводить с экрана числа, причем в стек должны добавляться поочередно положительные и отрицательные числа. 5. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ. Вводить символы с экрана в стек до встречи эталонного. Вывести все элементы стека. 6. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавить символы с экрана в стек. После добавления 5-го символа перед добавлением удалять элемент из стека. 7. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Ввести эталонный символ. Вводить символы с экрана в стек до встречи эталонного. Вывести размер стека. 8. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавлять символы с экрана в стек. В случае совпадения вводимого символа с вершиной стека вытолкнуть его и распечатать ее. 9. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Вводить символы с экрана в стек. В случае совпадения вводимого символа с вершиной стека вывести размер стека. 10. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана в первый стек. В случае совпадения вводимого символа с вершиной стека вводить во второй стек. 11. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана в стеки поочередно. 12. Создать стек для символов и стек для чисел. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Символ попадает в первый стек, а его численное представление – во второй. 13. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Прописные буквы попадают в первый стек, строчные – во второй, остальные символы пропускаются. 14. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Прописные буквы преобразуются в строчные и попадают в первый стек, строчные преобразуются в прописные и попадают во второй, остальные символы пропускаются. 15. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Числовое представление символа попадает в стек. 16. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавить 6 элементов. Удалить и вывести на экран 2 элемента. Задачу решить с использованием механизма указателей. 17. Создать стек для целых (положительных и отрицательных) чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести 6 элементов. При вводе чисел в стек попадают только отрицательные элементы. Вывести все элементы стека. Задачу решить с использованием механизма указателей. 18. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Ввести с экрана 6 элементов. Удалить 2 элемента. Вывести размер стека. Задачу решить с использованием механизма указателей. 19. Создать стек для целых (положительных и отрицательных) чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Вводить с экрана числа, причем в стек должны добавляться поочередно положительные и отрицательные числа. Задачу решить с использованием механизма указателей. 20. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ. Вводить символы с экрана в стек до встречи эталонного. Вывести все элементы стека. Задачу решить с использованием механизма указателей. 21. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавить символы с экрана в стек. После добавления 5-го символа перед добавлением следуюшего удалять элемент из стека. Задачу решить с использованием механизма указателей. 22. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Ввести эталонный символ. Вводить символы с экрана в стек до встречи эталонного. Вывести размер стека. Задачу решить с использованием механизма указателей. 23. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавлять символы с экрана в стек. В случае совпадения вводимого символа с вершиной стека вытолкнуть его и распечатать ее. Задачу решить с использованием механизма указателей. 24. Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека. Вводить символы с экрана в стек. В случае совпадения вводимого символа с вершиной стека вывести размер стека. Задачу решить с использованием механизма указателей. 25. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана в первый стек. В случае совпадения вводимого символа с вершиной стека вводить во второй стек. Задачу решить с использованием механизма указателей. 26. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана в стеки поочередно. Задачу решить с использованием механизма указателей. 27. Создать стек для символов и стек для чисел. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Символ попадает в первый стек, а его численное представление – во второй. Задачу решить с использованием механизма указателей. 28. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Прописные буквы попадают в первый стек, строчные – во второй, остальные символы пропускаются. Задачу решить с использованием механизма указателей. 29. Создать два стека для символов. Максимальный размер стеков вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Прописные буквы преобразуются в строчные и попадают в первый стек, строчные преобразуются в прописные и попадают во второй, остальные символы пропускаются. Задачу решить с использованием механизма указателей. 30. Создать стек для целых чисел. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана. Числовое представление символа попадает в стек. Задачу решить с использованием механизма указателей. 31. Создать текстовый файл, содержащий текстовую и числовую информацию. Используя стек, создать другой текстовый файл, в котором числа были бы записаны в обратном порядке. 32. Создать текстовый файл, содержащий текстовую информацию. Используя стек, создать другой текстовый файл, в котором слова были бы записаны в обратном порядке. 33. Создать текстовый файл, содержащий некоторую информацию. Используя стек, создать другой текстовый файл, в котором строки были бы записаны в обратном порядке. 34. Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел должно быть одинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались бы и были бы записаны в обратном порядке. 35. Создать текстовые файлы, содержащие один – текстовую, а другой – числовую информацию (количество слов и чисел должно быть одинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались бы, а порядок чисел и слов был бы сохранен. 36. Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел может быть неодинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались бы и были бы записаны в обратном порядке («лишние» числа или слова были бы записаны в конец файла). 37. В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений циклов в этой программе. 38. В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе. 39. В файле записан текст, сбалансированный по круглым скобкам. Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций закрывающих скобок. Например, для текста a+(45-f(x)*(b-c)) надо напечатать 8 10, 12 16, 3 17. 40. В текстовом файле без ошибок записано логическое выражение следующего вида: < лог.выр>:: = true | false | < лог.выр> and < лог.выр> | < лог.выр> or < лог.выр>. Используя стек, вычислить значение этого выражения с учетом общепринятого приоритета операций. 41. Написать программу слияния двух стеков, содержащих возрастающую последовательность целых положительных чисел, в третий стек так, чтобы его элементы располагались также в порядке возрастания. 42. Написать программу формирования стека, куда помещаются целые положительные числа, вводимые с клавиатуры (процесс ввода должен прекращаться, как только среди вводимых чисел появляется отрицательное число, после этого программа должна вывести на экран содержимое стека в том же порядке, в котором они были введены).
|