Добавил:
serega_ovc
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программная инженерия 1 курс / 2 семестр / lab2 / main
.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node{
int date;
struct Node *next;
};
struct Stack{
struct Node *head;
int size;
};
struct Stack initStack(){
struct Stack stack = {NULL,0};
return stack;
}
void push(struct Stack *stack,int x){
struct Node *node = malloc(sizeof(struct Node));
node->date = x;
node->next = stack->head;
stack->head = node;
stack->size++;
printf("ok\n");
}
void pop(struct Stack *stack){
struct Node *node = stack->head;
stack->head = stack->head->next;
stack->size--;
printf("%d\n",node->date);
free(node);
}
void top(struct Stack *stack){
printf("%d\n",stack->head->date);
}
void size(struct Stack *stack){
printf("%d\n",stack->size);
}
int isEmpty(struct Stack *stack){
return !stack->size;
}
void exit(struct Stack *stack){
while(!isEmpty(stack)){
struct Node *node = stack->head;
stack->head = stack->head->next;
stack->size--;
free(node);
}
printf("bye\n");
}
int main() {
struct Stack stack = initStack();
long int elem;
int return_flag = 1;
char str[5];
while(return_flag){
scanf("%s",&str);
if(!strcmp(str,"push")){
scanf("%li",&elem);
push(&stack,elem);
continue;
}
if(!strcmp(str,"pop")&& !isEmpty(&stack)){
pop(&stack);
continue;
}
if(!strcmp(str,"top")&& !isEmpty(&stack)){
top(&stack);
continue;
}
if(!strcmp(str,"size")){
size(&stack);
continue;
}
if(!strcmp(str,"exit")){
exit(&stack);
return 0;
}
return_flag = 0;
}
printf("error");
return 0;
}