Linked Stack 예제 테스트~
연습삼아 해본거 올립니다. 참고만 하세요
#include #include #include #define STACK_MAX 100 // 스택 최대 공간. typedef char* StackData;// 스택에 저장할 정보 타입. typedef struct StackCt // Stack Container { StackData data; struct StackCt* link; } Stack; Stack* top; // Top Stack int nStackCounter; // 스택 카운터. void StackInitialize(); // 스택 초기화 함수. int isEmpty(); // 스택이 비어있는지 검사. int isFull(); // 스택이 꽉 차있는지 검사. void push(StackData); // 스택에 데이터 넣기. StackData pop(); // 스택의 데이터 가져오기. void main() { StackInitialize(); // 스택 초기화 for(int i = 0; i < 100; ++i) { char* tp; int alphaSize = ((i % 10) == 0 ? 1 : 2); // char 사이즈가 한개인지 두개인지 판단 하기 위해. tp = (char*)malloc(sizeof(char) * alphaSize); itoa(i, tp, 10); push(tp); } push("test"); // 스택이 가득 찼다. for(i = 0; i < 100; ++i) { printf("%s\t", pop()); if((i + 1) % 5 == 0) printf("\n"); } printf("%s\n", pop()); // 스택이 비어 있다. } void StackInitialize() { top = (Stack*)malloc(sizeof(Stack)); top->data = NULL; top->link = NULL; nStackCounter = 0; } int isEmpty() { return (nStackCounter <= 0); } int isFull() { return (nStackCounter > STACK_MAX - 1); } void push(StackData sd) { if(isFull()) { printf("스택이 가득 찼습니다.\n"); return; } Stack* temp = (Stack*)malloc(sizeof(Stack)); temp->data = (StackData)sd; temp->link = (Stack*)top->link; top->link = (Stack*)temp; ++nStackCounter; } StackData pop() { if(isEmpty()) { printf("스택이 비어 있습니다.\n"); return NULL; } StackData sd; sd = top->link->data; top->link = top->link->link; --nStackCounter; return sd; }