Ну вот это первая (в изучении ) и основная структура данных а именно стек, относится к классу LIFO (Last In First Out). Здесь он реализован на массиве, фиксированного размера. Что избежать ограничения фиксированного размера, стек можно сделать на списке. Ниже приведен исходник.
#include <string.h> #define SIZE 20 #define STR_SIZE 128 struct stack { char name[SIZE][STR_SIZE]; int size; }; void push(stack* pStack, char* value) { if(pStack->size>=SIZE-1) { printf("Stack is overflow...\n"); return; } strcpy(pStack->name[++pStack->size],value); } char* pop(stack* pStack) { char* temp= new char[STR_SIZE]; if(pStack->size==SIZE-1) { printf("Stack empty...\n"); return NULL; } strcpy(temp,pStack->name[pStack->size]); strcpy(pStack->name[pStack->size--],""); return temp; } void print_stack(stack *pStack) { int temp=pStack->size; while(!(temp==-1)) { printf("Stack value: %s\n",pStack->name[temp]); temp--; } } int _tmain(int argc, _TCHAR* argv[]) { stack mystack; char* removed_elem=NULL; mystack.size=-1; push(&mystack,"First element"); push(&mystack,"Second element"); push(&mystack,"Third element"); push(&mystack,"Fourth element"); print_stack(&mystack); removed_elem=pop(&mystack); printf("Removed item %s\n",removed_elem); delete[] removed_elem; getchar(); return 0; }
Оставить комментарий