C언어/C언어 예제

[C언어 소스] 스택 - 연견리스트로 구현

언제나휴일 2016. 4. 13. 17:40
반응형

[C언어 소스] 스택 - 연견리스트로 구현




스택 - 연결리스트로 구현.c


//스택 - 연결리스트로 구현

#include <stdio.h>

#include <stdlib.h>

 

 

typedef struct Node //노드 정의

{

    int data;

    struct Node *next;

}Node;

 

typedef struct Stack //Stack 구조체 정의

{

    Node *top;    //맨 앞 노드(가장 최근에 생성한 노드)

}Stack;

 

void InitStack(Stack *stack);//스택 초기화

int IsEmpty(Stack *stack); //스택이 비었는지 확인

void Push(Stack *stack, int data); //스택에 보관

int Pop(Stack *stack); //스택에서 꺼냄

 

int main(void)

{

    int i;

    Stack stack;

 

    InitStack(&stack);//스택 초기화

    for (i = 1; i <= 5; i++)//1~5까지 스택에 보관

    {

        Push(&stack, i);

    }

    while (!IsEmpty(&stack))//스택이 비어있지 않다면 반복

    {

        printf("%d ", Pop(&stack));//스택에서 꺼내온 값 출력

    }

    printf("\n");

    return 0;

}

void InitStack(Stack *stack)

{

    stack->top = NULL; //스택 초기화에서는 top NULL로 설정

}

 

int IsEmpty(Stack *stack)

{

    return stack->top == NULL;    //top NULL이면 빈 상태   

}

void Push(Stack *stack, int data)

{

    Node *now = (Node *)malloc(sizeof(Node)); //노드 생성

    now->data = data;//데이터 설정

    now->next = stack->top;//now next링크를 현재 top으로 설정  

    stack->top = now;   //스택의 맨 앞은 now로 설정

}

int Pop(Stack *stack)

{

    Node *now;

    int re;

    if (IsEmpty(stack))

    {

        return 0;

    }

    now = stack->top;//now top으로 설정

    re = now->data;//꺼낼 값은 now data로 설정

 

    stack->top = now->next;//top now next로 설정

    free(now);//필요없으니 메모리 해제

    return re;

}

반응형