Forumlar » 2. Programlama » C++ » c'de doubly linked list kullanarak insertion sort

 

> 1 <
Yazar Mesaj

Çevirmiçi mi? zeynepcipil

zeynep cipiloglu
2 ileti

Şehir: Türkiye ankara
Meslek: öğrenci
Yaş:
15:05 12-02-2006 GMT+02 saat      
Merhaba,
C'de her satirinda bir ogrenciye ait id, isim, soyisim, bolum ve gpa gibi bilgilerin bulundugu(boslukla ayrilmis) bir text dosyasini okuyup her bir ogrenciyi doubley linked liste ekleyen ve daha sonra bu linked listi insertion sort kullanarak idye gore kucukten buyuge siralayan bu siralanmis halini bir output dosyasina yazdiran bir program yazmam gerekiyor. sort metodunu cagirmadan yazdigim kod input dosyasindakilerin aynisini output dosyasina yazdiriyor. ama sort()u cagirdigimda input dosyasina gore farkli farkli output veriyor. mesela input dosyasi

20301576 tewr wet cs 3.50
20201045 wettk ttv ee 2.25
20403457 hhhh uoi jl 3.60
20401030 jhhj kgk jhk 4.0
20301858 aaad fsdf cs 3.41
20105689 khk hlhl kjk 4.0 iken

output
20301576,aysegu,ozkan,cs,3.500000
20301858,zeynep,cipil,cs,3.410000
20401030,jhhj,kgk,jhk,4.000000
20403457,hhhh,uoi,jl,3.600000 oluyor

inputta en alttaki satiri uste aldigimda dogru calisiyor.

Ayrica burdaki sort metodunun insertion sort olup olmadigindan da cok emin degilim. kodumu gonderiyorum yardimci olabilirseniz cok sevinirim. Tesekkurler

#include <stdio.h>
#include <stdlib.h>

struct Entry{
int sid;
char name[50];
char last[50];
char dept[50];
float gpa;
struct Entry *next;
struct Entry *prev;
};

void insert( struct Entry *e);
void sort( struct Entry *head);

struct Entry *head = NULL;

struct Entry *tail = NULL;

main( )
{
FILE *fp; /* declare the file pointer */
char c;
fp = fopen ("in.txt", "r"); /* open the file for reading */

while( !feof( fp)){
struct Entry *e = malloc(sizeof(struct Entry) );
fscanf( fp, "%d %s %s %s %f", &e->sid, e->name, e->last, e->dept, &e->gpa);
insert( e);

}

sort( head);
fclose( fp);

fp = fopen( "out.txt", "w");

while( head != NULL){
fprintf(fp,"%d,%s,%s,%s,%f",head->sid, head->name, head->last, head->dept, head->gpa);
fprintf(fp,"\n");

head=head->next;


}
}

void insert(struct Entry *e){

if( head == NULL){
e->prev = NULL;
e->next = NULL;
head = e;
tail = e;
}

else{
tail->next = e;
e->prev = tail;
e->next = NULL;
tail = e;
}
}

void sort( struct Entry *head){
struct Entry *node1, *node2, *insertpt, *temp;
for( node1 = head->next; node1 != NULL; node1 = node1->next){
insertpt = NULL;
for( node2 = node1; node2->prev != NULL; node2 = node2->prev )
if( node1->sid < node2->prev->sid)
insertpt = node2->prev;

if( insertpt != NULL){
temp = node1->prev;
if( node1->next != NULL){
node1->prev->next = node1->next;
node1->next->prev = node1->prev;
}
else{
node1->prev->next = NULL;
tail = node1->prev;
}

if( insertpt == head){
node1->next = insertpt;
insertpt->prev = node1;
node1->prev = NULL;
head = node1;
}

else{
insertpt->prev->next = node1;
node1->prev = insertpt->prev;
node1->next = insertpt;
insertpt->prev = node1;
}

node1 = temp;
}

}
}
> 1 <