void DelCertainElement(int x) { NODE* PrevNODE=NULL;//we need to memorize a previous element for deleting if(head!=NULL) { NODE* CurrNODE; CurrNODE=head; while (CurrNODE!=NULL) { if(CurrNODE->data==x) { if(CurrNODE==head) { DelFirst(); } else { if(CurrNODE==tail) { DelLast(); } else { PrevNODE->next=CurrNODE->next; } } } PrevNODE=CurrNODE; CurrNODE=CurrNODE->next; } } }
void DeleteCertainElement(int x) { NODE *CurrNODE=head; if(head->data==x) DelFirst(); else { if(tail->data==x) { DelLast(); } else { while(CurrNODE!=NULL) { if(CurrNODE->data==x) { CurrNODE->prev->next=CurrNODE->next; CurrNODE->next->prev=CurrNODE->prev; } CurrNODE=CurrNODE->next; } } } }
void DelVLast(List *L,infotype *X) { /* I.S. List tidak kosong */ /* F.S. Elemen sebelum dummy dihapus nilai info disimpan pada X */ /*dan alamat elemen terakhir sebelum dummy di-dealokasi */ address P; DelLast(L,&P); (*X) = Info(P); Dealokasi(&P); }
void DelVLast (List *L, infotype *X) { /* Kamus Lokal */ address P; /* Algoritma */ DelLast(L,P); (*X) = Info(P); Dealokasi(P); }
void DelVLast(List *L, infotypeList *X) /* I.S. list tidak kosong */ /* F.S. Elemen terakhir list dihapus: nilai info disimpan pada X */ /* dan alamat elemen terakhir di-dealokasi */ { addressList P; DelLast(L, &P); *X = Info(P); Dealokasi(&P); }
int main() { FILE *pf_in=fopen("input.dat", "r"); FILE *pf_out=fopen("output.dat", "w"); char action[20]; int value; while(fscanf(pf_in,"%s %d", &action, &value)!=EOF) { if((strcmp(action,"AF"))==0) { AddFirst(value); } if((strcmp(action,"AL"))==0) { AddLast(value); } if((strcmp(action,"DF"))==0) { DelFirst(); } if((strcmp(action,"DL"))==0) { DelLast(); } if((strcmp(action,"DOOM_THE_LIST"))==0) { DoomList(); } if((strcmp(action,"DE"))==0) { DeleteCertainElement(value); } if((strcmp(action,"PRINT_ALL"))==0) { PrintAll(pf_out); } if((strcmp(action,"PRINT_F"))==0) { PrintFirst(value, pf_out); } if((strcmp(action,"PRINT_L"))==0) { PrintLast(value, pf_out); } } fclose(pf_in); return 0; }
void DelAfter(List *L,address *Pdel,address Prec) { /* I.S. List tidak kosong. Prec adalah anggota list. F.S. Menghapus Next(Prec). Pdel adalah alamat elemen list yang dihapus */ //Kamus Lokal address Pt; //Algoritma if(Prec==Last(*L)) DelFirst(L,Pdel); else if(Prec==Prev(First(*L))) DelLast(L,Pdel); else { (*Pdel) = Next(Prec); Pt = Next(*Pdel); Next(Prec) = Pt; Prev(Pt) = Prec; } }
int main() { char strng[20]; int value; FILE *d; d= fopen("input.dat", "r"); while(fscanf(d, "%s %d", &strng, &value)!=EOF) { if (strcmp(strng,"AF")==0) AddFirst(value); if (strcmp(strng,"AL")==0) AddLast(value); if (strcmp(strng,"PRINT_ALL")==0) print_list(); if (strcmp(strng,"DF")==0) DelFirst(); if (strcmp(strng,"DL")==0) DelLast(); if (strcmp(strng,"DOOM_THE_LIST")==0) DoomTheList(); if (strcmp(strng,"DE")==0) DelAnElement(value); if (strcmp(strng,"PRINT_F")==0) PRINT_F(value); if (strcmp(strng,"PRINT_L")==0) PRINT_L(value); } fclose(d); return 0; }
void DelAnElement(int x) { node *prevNode=NULL, *currentNode; if (head!=NULL&&head->data==x) DelFirst(); prevNode=head; currentNode=head; currentNode=currentNode->next; if (head!=NULL) { while (currentNode!=NULL) { if (currentNode->data==x) { if (currentNode==head) { DelFirst(); } else { if(currentNode==tail) { DelLast(); } else { currentNode->prev->next=currentNode->next; currentNode->next->prev=currentNode->prev; free(currentNode); } } } } } }