Created
March 17, 2018 08:34
-
-
Save romec512/be361fd78fddb92bfd6b294ac83d1c85 to your computer and use it in GitHub Desktop.
Lab1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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