희 탁 해 . 펙 하 크 트 했. ...
팩 ¶
{{|
학
-
-student (dept, name, num(1~20)
-(
학
-
-student (dept, name, num(1~20)
-(
( -num 해...,
(-binary search??, sequential search...)
(option-파 )
|}}(-binary search??, sequential search...)
(option-파 )
¶
~cpp /* 크 트 한 학 *크 트 학->학->학->NULL */ #include <stdio.h> #define HEAD 0 #define TAIL 1 #define ORIGINALSEARCH 0 #define DELETIONSEARCH 1 struct Student{ char dept[10]; char name[10]; int number; struct Student* nextStudent; }; typedef struct Student Student; int Menu(int aPopulation);//택 int Process(int aMenu, int aPopulation, Student* aListPointer[]); int AddStudent(int aPopulation, Student* aListPointer[]);// 학 void SearchStudent(Student* aHead);// int DelStudent(int aPopulation, Student* aListPointer[]);// void InputStudentInfo(Student* aStudent);// void FreeMemory(Student* aHead);// 해 void ListOutput(Student* aHead);// Student* Searching(int aNumber, Student* aHead, int aType);// int main() { Student* listPointer[2];//트 int population = 0;// 학 do{ population = Process(Menu(population), population, listPointer); printf("\n");// 한 . }while(population != -1);// FreeMemory(listPointer[HEAD]);// 해 system("PAUSE"); return 0; } int Menu(int aPopulation){ int selectedMenu; printf("☞하. 학 .\n"); printf("1. 학 \n"); if(aPopulation){// 학 printf("2. 학 \n"); printf("3. 학 \n"); } printf("4. \n"); printf("\n 택해 : "); scanf("%d", &selectedMenu); return selectedMenu; } int Process(int aMenu, int aPopulation, Student* aListPointer[]){ if(aMenu == 1)// aPopulation = AddStudent(aPopulation, aListPointer); else if(aMenu == 4)// aPopulation = -1; else if(aPopulation){// 학 if(aMenu == 2)// SearchStudent(aListPointer[HEAD]); if(aMenu == 3)// aPopulation = DelStudent(aPopulation, aListPointer); } else printf("\n 택.\n"); return aPopulation; } int AddStudent(int aPopulation, Student* aListPointer[]){ Student* newStudent; newStudent = (Student*)malloc(sizeof(Student)); InputStudentInfo(newStudent); if(!aPopulation){// aListPointer[HEAD] = newStudent; } else{ aListPointer[TAIL]->nextStudent = newStudent; } aListPointer[TAIL] = newStudent; aPopulation++; printf("\n 학\n");// 한. ListOutput(aListPointer[HEAD]); return aPopulation; } void SearchStudent(Student* aHead){ int searchNumber; Student* searched; printf("\n할 학 호 하: "); scanf("%d", &searchNumber); searched = Searching(searchNumber, aHead, ORIGINALSEARCH); if(searched) printf(" !\n: %s\n: %s\n호: %d\n", searched->dept, searched->name, searched->number); else printf(" 패, 호.\n"); } int DelStudent(int aPopulation, Student* aListPointer[]){ int deleteNumber; Student* searchedFormer; Student* searched; printf("\n할 학 호 하: "); scanf("%d", &deleteNumber); searchedFormer = Searching(deleteNumber, aListPointer[HEAD], DELETIONSEARCH); if(!searchedFormer || searchedFormer->nextStudent){ if(!searchedFormer){ // searched = aListPointer[HEAD]; aListPointer[HEAD] = searched->nextStudent; } else if(!(searched->nextStudent)){// searched = searchedFormer->nextStudent; searchedFormer->nextStudent = NULL; aListPointer[TAIL] = searchedFormer; } else{ // searched = searchedFormer->nextStudent; searchedFormer->nextStudent = searched->nextStudent; } free(searched);// 해 aPopulation--; printf("\n 학\n");// ListOutput(aListPointer[HEAD]); } else printf(" 패, 호.\n"); return aPopulation; } void InputStudentInfo(Student* aStudent){ printf(": "); scanf("%s", aStudent->dept); printf(": "); scanf("%s", aStudent->name); printf("호: "); scanf("%d", &(aStudent->number)); aStudent->nextStudent = NULL; } void FreeMemory(Student* aHead){ Student* temp; while(aHead){//크 ~ 해 temp = aHead; free(temp); aHead = aHead->nextStudent; } } void ListOutput(Student* aHead){ int counter = 0; Student* temp; temp = aHead; while(temp){//크 ~ counter++; printf("%s\n",temp->name); temp = temp->nextStudent; } printf(" %d 학 .\n", counter); } Student* Searching(int aNumber, Student* aHead, int aType){ Student* searched = aHead; Student* searchedFormer = NULL; while(searched){////크 ~ if(searched->number == aNumber) break; else{ searchedFormer = searched; searched = searched->nextStudent; } } if(aType == ORIGINALSEARCH) return searched; else return searchedFormer; }