Скачиваний:
37
Добавлен:
10.02.2019
Размер:
1.53 Кб
Скачать
#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;
}
Соседние файлы в папке lab2