#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