#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 |