Sortering af linket liste
Hej eksperter :)Er der nogle der kender en (relativ) simpel metode at sortere en linket liste på?
(gerne et kode eksempel)
Performans er helt uden betydning.
Jeg bruger MS Visual C++ 6.0
Min linkede liste er opbygget af følgende:
//----------------------------------------------------------
// INCLUDE STATEMENTS
//----------------------------------------------------------
#include <string>
using namespace std;
class ITEM {
public:
//----------------------------------------------------------
// MEMBER VARIABLES
//----------------------------------------------------------
char File[260];
char Name[50];
ITEM *next;
ITEM *prev;
//----------------------------------------------------------
// CONSTRUCTOR
//----------------------------------------------------------
ITEM(char name[50], char file[260]) {
next = NULL;
prev = NULL;
strcpy(Name, name);
strcpy(File, file);
}
};
class LIST {
public:
//----------------------------------------------------------
// MEMBER VARIABLES
//----------------------------------------------------------
ITEM *item;
unsigned long int number;
//----------------------------------------------------------
// CONSTRUCTOR
//----------------------------------------------------------
LIST() {
item = NULL;
number = 0;
}
//----------------------------------------------------------
// DESTRUCTOR
//----------------------------------------------------------
~LIST() {
ITEM *p=item;
unsigned int t=0;
while(p && number) {
number--;
if (p->next!=NULL) {
ITEM *tmp=p; p=p->next;
delete tmp;
}
else delete p;
}
}
//----------------------------------------------------------
// CLASS MEMBER FUNCTION DECLARATIONS/DEFINITIONS
//----------------------------------------------------------
//----------------------------------------------------------
// add_item
//----------------------------------------------------------
void add_item(char *name, char *file) {
if ((name!=NULL) && (strcmp(file,".")) && (strcmp(file, ".."))) {
ITEM *p = new ITEM(name, file);
if (item==NULL) {
item=p;
}
else {
p->next=item;
item->prev=p;
item=p;
}
number++;
}
}
//----------------------------------------------------------
// remove_STB
//----------------------------------------------------------
void remove_item(char *name) {
ITEM *p=item;
while(p) {
if (!strcmp(p->Name,name)) {
if (p->next!=NULL) {
p->next->prev=p->prev;
p->prev->next=p->next;
delete p;
number--;
break;
}
}
p=p->next;
}
}
};