linkedList (수정)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define OR ||
typedef int element;
typedef struct linkedList {
struct linkedList* linked;
element data_of_int;
}linkedList, *linkedList_Pointer;
typedef struct nodeType {
linkedList_Pointer head;
linkedList_Pointer tail;
int dataCnt;
}nodeType, *nodeType_Pointer;
// function
void linkedList_Setting(nodeType_Pointer start); //[1]
void linkedList_Data_Input(nodeType_Pointer start); //[2] +
void linkedList_Printf(nodeType_Pointer start); //[3]
void linkedList_First_Remove(nodeType_Pointer start); //[4] -
void linkedList_Last_Remove(nodeType_Pointer start); //[5] -
// ---------------- < MAIN > -------------------------------------
int main(void) {
nodeType start;
linkedList_Setting(&start);
linkedList_Data_Input(&start);
linkedList_Data_Input(&start);
linkedList_Data_Input(&start);
linkedList_Data_Input(&start);
linkedList_Data_Input(&start);
linkedList_Printf(&start);
linkedList_First_Remove(&start);
linkedList_Printf(&start);
linkedList_Last_Remove(&start);
linkedList_Printf(&start);
return 0;
}
// ---------------------------------------------------------------
void linkedList_Setting(nodeType_Pointer start) { //[1]
start->head = (linkedList_Pointer)malloc(sizeof(linkedList));
start->tail = (linkedList_Pointer)malloc(sizeof(linkedList));
if ((start->head == NULL) OR(start->tail == NULL)) return;//END
else { // start->head !=NULL AND start->tail != NULL
// ----- < node_initiallize > ------
start->head->linked = NULL;
start->head->data_of_int = 0;
start->tail->linked = NULL;
start->tail->data_of_int = 0;
start->dataCnt = 0;
}
}
void linkedList_Data_Input(nodeType_Pointer start) { //[2]+
linkedList_Pointer newNode = NULL;
newNode = (linkedList_Pointer)malloc(sizeof(linkedList));
if (newNode == NULL) return;//END
else { // newNode != NULL
//------------- node setting -------------
newNode->linked = NULL;
newNode->data_of_int = 0;
printf("new_Data input >>> ");
scanf_s("%d", &newNode->data_of_int);
//----------------------------------------
if (start->dataCnt == 0) {
start->head->linked = newNode;
start->tail->linked = newNode;
start->dataCnt += 1; //------------> +1
}
else {//--------------------------------> start->dataCnt >= 1
start->tail->linked->linked = newNode;
start->tail->linked = newNode;
start->dataCnt += 1; //------------> +1
}
}
}
void linkedList_Printf(nodeType_Pointer start) { //[3]
int index_i;
linkedList_Pointer index = start->head->linked;
if (start->dataCnt == 0) {
printf("data empty!!\n");
return;//END
}
else {//-------> start->dataCnt != 0
for (index_i = 0; index_i< start->dataCnt; index_i++) {
printf("%d ", index->data_of_int);
index = index->linked;
}printf("\n");
}
}
void linkedList_First_Remove(nodeType_Pointer start) { //[4] -
linkedList_Pointer remove_node = NULL;
if (start->dataCnt == 0) { //------------->[case1]
printf("data empty!!!\n");
return;//END
}
else if (start->dataCnt == 1) {//------>[case2]
remove_node = start->head->linked;
start->head->linked = NULL;
start->tail->linked = NULL;
start->dataCnt -= 1;//--------------------> -1
free(remove_node); // memory release
}
else //(start->dataCnt > 1) {//---------->[case3]
remove_node = start->head->linked;
start->head->linked = start->head->linked->linked;
free(remove_node);//--------------------->memory release
start->dataCnt -= 1;//--------------------> -1
}void linkedList_Last_Remove(nodeType_Pointer start)
{
linkedList_Pointer remove_node = NULL;
linkedList_Pointer index_node = NULL;
if (start->dataCnt == 0) { //------------->[case1]
printf("data empty!!!\n");
return;//END
}
else if (start->dataCnt == 1) {//------>[case2]
remove_node = start->head->linked;
start->head->linked = NULL;
start->tail->linked = NULL;
start->dataCnt -= 1;//--------------------> -1
free(remove_node);//--------------------->memory release
}
else {//(start->dataCnt > 1) {//--------->[case3]
int index;
index_node = start->head->linked;
for (index = 0; index < start->dataCnt - 1; index++) {
index_node = index_node->linked;
} remove_node = index_node->linked;
index_node->linked = NULL;
start->tail->linked = index_node;
start->dataCnt -= 1;////--------------------------> -1
}
}
'언어 > c언어' 카테고리의 다른 글
QUEUE (0) | 2016.02.22 |
---|---|
STACK (0) | 2016.02.21 |
queue (수정할것 아직 완성되지 않음) (0) | 2016.02.17 |
Bubble__Sort (ver 0.1) 2016. 2. 17 kimjun hyeon (0) | 2016.02.17 |
naver 지식인 (0) | 2016.02.15 |