¶
{{|
메모리 리 램
-배
-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;
}










