STACK

언어/c언어2016. 2. 21. 13:22

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int element;
typedef struct stack_type{
    element data_type_integer;
    struct stack_type* linked;
}StackType, *StackTypePointer;
                               
typedef struct nodeType{
    StackTypePointer Head;
    StackTypePointer Top;
    int dataCnt;
}nodeType, *nodeTypePointer;
//---- < FUNCTION > -----
void stack_setting(nodeTypePointer NTP);
void stack_data_input(nodeTypePointer NTP);
void stack_data_printf(nodeTypePointer NTP);
void stack_data_pop(nodeTypePointer NTP);
//---- <   MAIN   > ----
int main(void){
    nodeType stack;
    stack_setting(&stack);
    stack_data_input(&stack);
    stack_data_input(&stack);
    stack_data_input(&stack);
    stack_data_input(&stack);
    stack_data_input(&stack);
    stack_data_printf(&stack);
    stack_data_pop(&stack);
    stack_data_printf(&stack);
    return 0;
}
//Func [1]
void stack_setting(nodeTypePointer NTP){
    NTP->Head = NULL;
    NTP->Head = (StackTypePointer)malloc(sizeof(StackType));
    if (NTP->Head == NULL) {
        printf("fail \n");
        return;//END
    } else {// NTP->Head != NULL
        NTP->dataCnt = 0;
        NTP->Head->data_type_integer = 0;
        NTP->Head->linked = NULL;
        NTP->Top = NTP->Head;
    }
}
//Func [2]
void stack_data_input(nodeTypePointer NTP){
    StackTypePointer newNode = NULL;
    newNode = (StackTypePointer)malloc(sizeof(StackType));
    if (newNode == NULL) {
        printf("fail \n");
        return;//END
    } else {//newNode != NULL
    //------- <- new data setting -> ---------------
        newNode->linked = NULL;
        newNode->data_type_integer = 0;
        printf("data input >>> ");
        scanf("%d", &newNode->data_type_integer);
    //----------------------------------------------
    }

    if (NTP->dataCnt == 0) {
        NTP->Head->linked = newNode;
        NTP->Top = newNode;
        NTP->dataCnt++; //---------------------------------- dataCnt +1
    } else {//NTP->dataCnt >=1
        NTP->Top->linked = newNode;
        NTP->Top = newNode;
        NTP->dataCnt++;//----------------------------------- dataCNt +1
    }
}
//Func [3]
void stack_data_printf(nodeTypePointer NTP){
    StackTypePointer index_  = NULL;
    int index;
    if (NTP->dataCnt == 0) {
        printf("dataCnt Empty!!!\n");
        return;//END
    } else {//NTP->dataCnt>=1
        index_ = NTP->Head->linked;
        for(index = 0; index < NTP->dataCnt; index++){
            printf("%d ", index_->data_type_integer);
            index_ = index_->linked;
        }printf("\n");
    }
}
void stack_data_pop(nodeTypePointer NTP){
    StackTypePointer remove_node = NULL;
    StackTypePointer index_node  = NULL;
    if (NTP->dataCnt == 0) {
        printf("data Empty!!");
        return;//END
    }else {//NTP->dataCnt != 0
    //case1
        if (NTP->dataCnt == 1){
            remove_node = NTP->Head->linked;
            NTP->Head->linked = NULL;
            NTP->Top = NTP->Head;
            NTP->dataCnt--;//--------------------------- dataCnt -1
            free(remove_node);
        }
    //case2
        else{//NTP->dataCnt >1
            index_node = NTP->Head->linked;
            while(index_node->linked != NTP->Top){
                index_node = index_node->linked;
            }NTP->Top = index_node;
            remove_node = NTP->Top->linked;
            free(remove_node);
            NTP->dataCnt--;//--------------------------- dataCnt -1
        }
    }
}

           

'언어 > c언어' 카테고리의 다른 글

double linked  (0) 2016.02.23
QUEUE  (0) 2016.02.22
queue (수정할것 아직 완성되지 않음)  (0) 2016.02.17
Bubble__Sort (ver 0.1) 2016. 2. 17 kimjun hyeon  (0) 2016.02.17
linkedList (수정)  (0) 2016.02.16