Skip to content

Instantly share code, notes, and snippets.

@romec512
Created March 17, 2018 08:34
Show Gist options
  • Save romec512/be361fd78fddb92bfd6b294ac83d1c85 to your computer and use it in GitHub Desktop.
Save romec512/be361fd78fddb92bfd6b294ac83d1c85 to your computer and use it in GitHub Desktop.
Lab1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
struct MyStack {
int data;
MyStack *next;
};
void push(MyStack **stack, int value)
{
MyStack *current = NULL;
current = (MyStack*)malloc(sizeof(MyStack));
current->data = value;
current->next = (*stack);
(*stack) = current;
}
void pushDel(MyStack **stack, MyStack **deleted)
{
if ((*deleted) == NULL)
{
printf("Вспомогательный стек пуст!");
return;
}
MyStack *current = NULL;
current = (*deleted);
(*deleted) = (*deleted)->next;
current->next = (*stack);
(*stack) = current;
}
MyStack* manyPush(MyStack *stack)
{
int count = 0;
printf("Введите кол-во элементов:\n");
while (!scanf("%d", &count))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
srand(time(NULL));
while (count!=0)
{
int i = rand() % 100;
push(&stack, i);
count--;
}
return stack;
}
void show(MyStack *stack)
{
if (stack == NULL)
{
printf("Стек пуст!");
return;
}
MyStack *current = NULL;
current = stack;
while (current != NULL)
{
printf("%d\n", current->data);
current = current->next;
}
free(current);
}
void pop(MyStack **stack, MyStack **deleted)
{
if ((*stack) == NULL)
{
printf("Стек пуст!");
return ;
}
printf("1)Удалить безвозвратно.\n2)Поместить в вспомогательный стек.\n");
int select = 0;
while (!scanf("%d", &select))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
if (select == 1)
{
MyStack *current = (*stack)->next;
free(*stack);
(*stack) = current;
return;
}
else if (select == 2)
{
MyStack *current;
current = (*stack)->next;
(*stack)->next = *deleted;
(*deleted) = (*stack);
(*stack) = current;
return;
}
else
{
printf("Вы ввели неверное значение, попробуйте заново!");
return;
}
}
void Destroy(MyStack* stack)
{
free(stack);
stack = NULL;
}
void main()
{
setlocale(LC_ALL, "rus");
int select = 0;
MyStack *stack = NULL;
MyStack *deleted = NULL;
while (true)
{
printf("1)Ввести элемент.\n2)Удалить элемент.\n3)Вывод основного стека.\n4)Вывод вспомогательного стека.\n5)Выход.\n");
while (!scanf("%d", &select))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
if (select == 1)//ввести элемент
{
system("cls");
printf("1)Ввести 1 элемент.\n2)Ввести много элементов.\n");
while (!scanf("%d", &select))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
if (select == 1)//ввести 1 элемент
{
system("cls");
printf("1)Ввести значение.\n2)Добавить из вспомогательного стека.\n");
while (!scanf("%d", &select))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
if (select == 1)//ввести значение
{
system("cls");
printf("Введите значение: ");
while (!scanf("%d", &select))
{
while (getchar() != '\n')
printf("Введите заново.\n");
}
push(&stack, select); // Ввод одного символа с клавиатуры
}
else if (select == 2)//добавить из вспомогательного стека
{
system("cls");
pushDel(&stack, &deleted); // ввод одного символа из вспомогательного стека
}
else
{
printf("Вы ввели неверное значение!\n");
}
}
else if (select == 2)//добавить несколько значений
{
system("cls");
stack = manyPush(stack);//Множественный ввод
}
else
{
printf("Неверное значение!Попробуйте снова!\n");
}
}
else if (select == 2)//удалить
{
system("cls");
pop(&stack, &deleted); // удаление
}
else if (select == 3)//вывод осн. стека
{
system("cls");
show(stack); // вывод основного стека
}
else if (select == 4)//вывод вспомогательного стека
{
system("cls");
show(deleted); // вывод вспомогательного стека
}
else if (select == 5)//выход
{
Destroy(stack);
Destroy(deleted);
break;
}
system("pause");
system("cls");
}
system("pause");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment