C++ Listeye Alfabetik Sıraya Göre Ekleme Fonksiyonu Acil Yardım
-
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
typedef struct kayit { char Ad[15];
char Soyad[30];
char Adres[40];
unsigned short int Yas;
struct kayit * sonraki;} kayitTip;
int main()
{
kayitTip * Listeye_Ekle (kayitTip *, kayitTip *);
void Listele (kayitTip *);
kayitTip * Listeden_Sil(char*,kayitTip *);
kayitTip * kayit;
kayitTip * Liste=NULL;
int secim;
int L;
char Ad[15];
while(1){
printf("1.Kayit Ekle\n");
printf("2.Kayit Listele\n");
printf("3.Kayit Sil\n");
printf("Secim [1-4]?\n");
scanf("%d",&secim);
if(secim==1){
kayit=(kayitTip * ) malloc (sizeof(kayitTip));
printf("Ad:\n");
scanf("%s",kayit->Ad);
printf("Soyad:\n");
scanf("%s",kayit->Soyad);
printf("Adres:\n");
scanf("%s",kayit->Adres);
printf("Yas:\n");
scanf("%d",&kayit->Yas);
kayit->sonraki=NULL;
getch();
Liste=Listeye_Ekle(Liste,kayit);
printf("Islem Basarili!\n");
}else if(secim==2)Listele(Liste);
else if(secim==3){printf("Silinecek kaydin adini giriniz:\n");
scanf("%s",Ad);
Liste=Listeden_Sil(Ad,Liste);
}
else if (secim==4) break;
}
system("PAUSE");
return 0;
}
kayitTip* Listeye_Ekle(kayitTip * Liste, kayitTip * kayit) {
if (Liste!=NULL) {
kayit->sonraki=Liste;
Liste=kayit;
} else{Liste=kayit;}
}kayitTip* Listeden_Sil(char * Ad, kayitTip * L) {
kayitTip*p;
kayitTip*onceki;
p=L;
onceki=NULL;
while (p!=NULL){
if (strcmp (p->Ad,Ad)==0)
{
if (L==p){L=L->sonraki;
free(p);
}
else if(p->sonraki==NULL){
onceki->sonraki=NULL;
free(p);
}
else {
onceki->sonraki=p->sonraki;
free(p);}
}
onceki=p;
p=p->sonraki;
}
return L;
}
void Listele ( kayitTip * L) {
while( L!=NULL){
printf("Ad:%s\n", L->Ad);
printf("Soyad:%s\n", L->Soyad);
printf("Adres:%s\n", L->Adres);
printf("Yas:%d\n", L->Yas);
L=L->sonraki;}
}
Arkadaşlar komutlar bunlar ancak eklemeyi alfabetik yapmıyor. Girilen kaydın "Adı" strcmp ile varolan kayıtlarla karşılaştırılıp, başa sona ya da en önemlisi araya ekleme yapıp bağlantıların tekrardan kurulması gerek. Bu konuda acil yardım ederseniz çok sevinirim.Şimdiden teşekkür ederim.
-
Listeye ekleme yapıldıktan sonra sıralama yapılsa olurmu?
//bu fonksiyonu listeye_ekle fonksiyonun sonuna eklersin
void listeyi_sirala(kayitTip * L)
{
kayitTip *i,*k;
int tmp,j;
for(i=L;i->sonraki!=NULL;i=i->sonraki){
for(k=i->sonraki;k!=NULL;k=k->sonraki){
if(i->Ad[0]>k->Ad[0]){
tmp=i->Yas;
i->Yas=k->Yas;
k->Yas=tmp;
for(j=0;j<15;j++){
tmp=i->Ad[j];
i->Ad[j]=k->Ad[j];
k->Ad[j]=tmp;
}
for(j=0;j<25;j++){
tmp=i->Soyad[j];
i->Soyad[j]=k->Soyad[j];
k->Soyad[j]=tmp;
}
for(j=0;j<40;j++){
tmp=i->Adres[j];
i->Adres[j]=k->Adres[j];
k->Adres[j]=tmp;
}
}
}
}
} -
Hata alıyorumda tam olarak nereye ekleyeceğim ?
-
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef struct kayit { char Ad[15];
char Soyad[30];
char Adres[40];
unsigned short int Yas;
struct kayit * sonraki;} kayitTip;
int main()
{
kayitTip * Listeye_Ekle (kayitTip *, kayitTip *);
void Listele (kayitTip *);
kayitTip * Listeden_Sil(char*,kayitTip *);
kayitTip * kayit;
kayitTip * Liste=NULL;
int secim;
int L;
char Ad[15];
while(1){
printf("1.Kayit Ekle\n");
printf("2.Kayit Listele\n");
printf("3.Kayit Sil\n");
printf("Secim [1-4]?\n");
scanf("%d",&secim);
if(secim==1){
kayit=(kayitTip * ) malloc (sizeof(kayitTip));
printf("Ad:\n");
scanf("%s",kayit->Ad);
printf("Soyad:\n");
scanf("%s",kayit->Soyad);
printf("Adres:\n");
scanf("%s",kayit->Adres);
printf("Yas:\n");
scanf("%d",&kayit->Yas);
kayit->sonraki=NULL;
getch();
Liste=Listeye_Ekle(Liste,kayit);
printf("Islem Basarili!\n");
}else if(secim==2)Listele(Liste);
else if(secim==3){printf("Silinecek kaydin adini giriniz:\n");
scanf("%s",Ad);
Liste=Listeden_Sil(Ad,Liste);
}
else if (secim==4) break;
}
system("PAUSE");
return 0;
}
void listeyi_sirala(kayitTip * L)
{
kayitTip *i,*k;
int tmp,j;
for(i=L;i->sonraki!=NULL;i=i->sonraki){//liste sinif bilgilerine göre siralaniyor
for(k=i->sonraki;k!=NULL;k=k->sonraki){
if(i->Ad[0]>k->Ad[0]){
tmp=i->Yas;
i->Yas=k->Yas;
k->Yas=tmp;
for(j=0;j<15;j++){
tmp=i->Ad[j];
i->Ad[j]=k->Ad[j];
k->Ad[j]=tmp;
}
for(j=0;j<25;j++){
tmp=i->Soyad[j];
i->Soyad[j]=k->Soyad[j];
k->Soyad[j]=tmp;
}
for(j=0;j<40;j++){
tmp=i->Adres[j];
i->Adres[j]=k->Adres[j];
k->Adres[j]=tmp;
}
}
}
}
}
kayitTip* Listeye_Ekle(kayitTip * Liste, kayitTip * kayit) {
if (Liste!=NULL) {
kayit->sonraki=Liste;
Liste=kayit;
} else{Liste=kayit;}
}
kayitTip* Listeden_Sil(char * Ad, kayitTip * L) {
kayitTip*p;
kayitTip*onceki;
p=L;
onceki=NULL;
while (p!=NULL){
if (strcmp(p->Ad,Ad)==0)
{
if (L==p){L=L->sonraki;
free(p);
}
else if(p->sonraki==NULL){
onceki->sonraki=NULL;
free(p);
}
else {
onceki->sonraki=p->sonraki;
free(p);}
}
onceki=p;
p=p->sonraki;
}
return L;
}
void Listele ( kayitTip * L) {
while( L!=NULL){
printf("Ad:%s\n", L->Ad);
printf("Soyad:%s\n", L->Soyad);
printf("Adres:%s\n", L->Adres);
printf("Yas:%d\n", L->Yas);
L=L->sonraki;}
} -
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef struct kayit { char Ad[15];
char Soyad[30];
char Adres[40];
unsigned short int Yas;
struct kayit * sonraki;} kayitTip;
int main()
{
kayitTip * Listeye_Ekle (kayitTip *, kayitTip *);
void Listele (kayitTip *);
kayitTip * Listeden_Sil(char*,kayitTip *);
kayitTip * kayit;
kayitTip * Liste=NULL;
int secim;
int L;
char Ad[15];
while(1){
printf("1.Kayit Ekle\n");
printf("2.Kayit Listele\n");
printf("3.Kayit Sil\n");
printf("Secim [1-4]?\n");
scanf("%d",&secim);
if(secim==1){
kayit=(kayitTip * ) malloc (sizeof(kayitTip));
printf("Ad:\n");
scanf("%s",kayit->Ad);
printf("Soyad:\n");
scanf("%s",kayit->Soyad);
printf("Adres:\n");
scanf("%s",kayit->Adres);
printf("Yas:\n");
scanf("%d",&kayit->Yas);
kayit->sonraki=NULL;
getch();
Liste=Listeye_Ekle(Liste,kayit);
printf("Islem Basarili!\n");
}else if(secim==2)Listele(Liste);
else if(secim==3){printf("Silinecek kaydin adini giriniz:\n");
scanf("%s",Ad);
Liste=Listeden_Sil(Ad,Liste);
}
else if (secim==4) break;
}
system("PAUSE");
return 0;
}
void listeyi_sirala(kayitTip * L)
{
kayitTip *i,*k;
int tmp,j;
for(i=L;i->sonraki!=NULL;i=i->sonraki){//liste sinif bilgilerine göre siralaniyor
for(k=i->sonraki;k!=NULL;k=k->sonraki){
if(i->Ad[0]>k->Ad[0]){
tmp=i->Yas;
i->Yas=k->Yas;
k->Yas=tmp;
for(j=0;j<15;j++){
tmp=i->Ad[j];
i->Ad[j]=k->Ad[j];
k->Ad[j]=tmp;
}
for(j=0;j<25;j++){
tmp=i->Soyad[j];
i->Soyad[j]=k->Soyad[j];
k->Soyad[j]=tmp;
}
for(j=0;j<40;j++){
tmp=i->Adres[j];
i->Adres[j]=k->Adres[j];
k->Adres[j]=tmp;
}
}
}
}
}
kayitTip* Listeye_Ekle(kayitTip * Liste, kayitTip * kayit) {
if (Liste!=NULL) {
kayit->sonraki=Liste;
Liste=kayit;
} else{Liste=kayit;}listeyi_sirala(Liste);
}
kayitTip* Listeden_Sil(char * Ad, kayitTip * L) {
kayitTip*p;
kayitTip*onceki;
p=L;
onceki=NULL;
while (p!=NULL){
if (strcmp(p->Ad,Ad)==0)
{
if (L==p){L=L->sonraki;
free(p);
}
else if(p->sonraki==NULL){
onceki->sonraki=NULL;
free(p);
}
else {
onceki->sonraki=p->sonraki;
free(p);}
}
onceki=p;
p=p->sonraki;
}
return L;
}
void Listele ( kayitTip * L) {
while( L!=NULL){
printf("Ad:%s\n", L->Ad);
printf("Soyad:%s\n", L->Soyad);
printf("Adres:%s\n", L->Adres);
printf("Yas:%d\n", L->Yas);
L=L->sonraki;}
} -
Çok teşekkür ederim. Listelerken sadece ilk kayıt listeleniyor ama kod kısmı işimi görecektir. İyi günler.