|
struct list_node
{
int data;
list_pointer link;
}node;
list_pointer head = NULL;
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TButton *Button1;
TEdit *Edit1;
TEdit *Edit2;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall insert (list_pointer *,int); //노드 삽입
void __fastcall deite (list_pointer *,int); //노드 삭제
void __fastcall print_list (list_pointer ); //리스트 출력
__fastcall TForm1(TComponent* Owner);
};
---------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n, i, num;
Memo1->Lines->Add("enter list sizd");
AnsiString gop;
gop = Edit1->Text;
Memo1->Lines->Add(gop); //노드 개수 입력
if (n<1 || n > 100) //1=<n=<100
{
Memo1->Lines->Add(("out of range:")+StrToInt(gop));
}
//헤드 노드 생성, data =0
head = (list_pointer)malloc(sizeof(node));
head -> data = 0;
head -> link = NULL;
for (i = 0; i < n; i++) //n+1개의 노드로 구ㅗ성되 연결 리스트 구성
{
insert(&head, i+1);
}
print_list(head); //리스트의 내용 출력
Memo1->Lines->Add("enter data to delete"); //입력된 데이털글 포함한 노드를 리스트에서 삭제
gop = Edit2->Text;
Memo1->Lines->Add(gop);
deite(&head, num);
print_list(head); //리스트의 내용을 다시 출력
}
void __fastcall insert(list_pointer *ptr, int value) //헤드 노드 바로 다음에 새로운 노드를 삽입하는 함수
{
list_pointer temp;
temp = (list_pointer)malloc(sizeof(node));
temp -> data = value;
temp -> link = (*ptr) -> link;
(*ptr)->link=temp;
}
void __fastcall deite(list_pointer *ptr, int value) //전달 받은 데이터와 같은 값을 갖는 노드를 삭제하는 함수
{
list_pointer lead, trail;
trail = *ptr;
lead = (*ptr) -> link;
for(;lead;)
{
if(lead -> data ==value) //노드 삭제
{
trail->link=lead->link;
free(lead);
}
else //다음 노드로 진행
{
trail=lead;
lead=lead->link;
}
}
}
void __fastcall print_list(list_pointer ptr) //리스트의 내용을 출력하는 함수
{
Memo1->Lines->Add("data in list");
for (ptr = ptr->link; ptr; ptr=ptr->link)
{
Memo1->Lines->Add(ptr->data);
}
}
설명도 함께 부탁드립니다.
|