bağlı liste\c ile programlama -kuyruk oluşturma

Bir bankanın dört ayrı türden müşterileri vardır.  Müşterilerin öncelik sırası: 0: En öncelikli, 1: İkinci öncelikli, 2: Üçüncü öncelikli, 3: En az öncelikli. Müşterilerin adı ve öncelik numarası klavyeden girilecektir. Müşteriler önceliklerine göre sıraya sokulacaktır. Gişe memuru işi bittiğinde sıradaki müşteriyi isteyecektir. Müşterilere gişe numarası veren, gişe memurunun kuyruktan sıra numarasıyla müşteri isteyebildiği programı bağlı liste kullanarak C dilinde yazınız.

 

Örneğin: Kuyrukta herhangi bir anda 1, 1, 2, 3, 3 önceliğine sahip müşteriler olsun, o anda 0 öncelikli bir müşteri gelirse kuyruğun en önüne alınacaktır; benzer şekilde 2 öncelikli bir müşteri gelirse kuyruktaki 2 öncelikli müşterilerin arkasına eklenecektir. Sonuç olarak 0, 1, 1, 2, 2, 3 şeklinde olacaktır.

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

struct node 
{
     char ad[20],soyad[20];
     int hizmet_yilimiz;
     int oncelik_Numarasi;
    struct node *next;
}*front, *rear, *temp;
    
void enqueue(int oncelik_Numarasi,char *ad,char *soyad,int hizmet_yilimiz)
{   
    struct node* newNode=(struct node*)malloc(sizeof(struct node));
    newNode->oncelik_Numarasi=oncelik_Numarasi;
    
    strcpy(newNode->ad,ad);
     strcpy(newNode->soyad,soyad);
    
    newNode->hizmet_yilimiz=hizmet_yilimiz;
    newNode->next=NULL;
    
    struct node *prevTemp;
    if(front==NULL)
        front=rear=temp=newNode;
        else if(newNode->oncelik_Numarasi>=rear->oncelik_Numarasi)
        {
            rear->next=newNode;
            rear=newNode;
            return;
        }
            else if(newNode->oncelik_Numarasi>temp->oncelik_Numarasi)
        {
            while(1)
            {
                temp=temp->next;
                if(prevTemp->oncelik_Numarasi<newNode->oncelik_Numarasi&&temp->oncelik_Numarasi>newNode->oncelik_Numarasi)
                {
                    prevTemp->next=newNode;
                    newNode->next=temp;
                    temp=prevTemp=front;
                    break;
                }
                else if(prevTemp->oncelik_Numarasi<newNode->oncelik_Numarasi&&temp->oncelik_Numarasi==newNode->oncelik_Numarasi)
                {
                    while(temp->oncelik_Numarasi==newNode->oncelik_Numarasi)
                    {
                        prevTemp=temp;
                        temp=temp->next;
                    }
                    prevTemp->next=newNode;
                    newNode->next=temp;
                    break;
                }
                else
                prevTemp=temp;
            }
            temp=prevTemp=front;
        }        
        else if(newNode->oncelik_Numarasi<temp->oncelik_Numarasi)
        {
            newNode->next=front;
            front=temp=newNode;
            return;
        }
        else if(newNode->oncelik_Numarasi==temp->oncelik_Numarasi)
        {
            while(newNode->oncelik_Numarasi==temp->oncelik_Numarasi)
            {
                prevTemp=temp;
                temp=temp->next;
            }
            prevTemp->next=newNode;
            newNode->next=temp;                                                                            
            temp=prevTemp=front;
            return;
        }
    
}

     
void dequeue()
{
    if(front==NULL)
    {
    printf("Musteri Yok!!!\n\n\n");
    return;
    }
    else
    {
        struct node *temp=front;
        front=front->next;
        printf("\nSiradaki musteri:\n\n\n\n");
        printf("\tOncelik Numarasi:\t%d",temp->oncelik_Numarasi);
        printf("\n\tAdi:\t\t\t%s",temp->ad);
        printf("\n\tSoyadi:\t\t\t%s",temp->soyad);
        printf("\n\tHizmet_yilimiz:\t\t\t%d\n\n",temp->hizmet_yilimiz);
        free(temp);
    }
}
     
void display()
{
    int i;
    if(front==NULL)
    {
        printf("\nKuyruk bos....");
        return;
    }
    struct node *der=front;
    printf("\nSiradaki musteriler:\n\n\n\n");
    while(der!=NULL)
    {
        printf("\tOncelik Numarasi:\t%d",der->oncelik_Numarasi);
        printf("\n\tAdi:\t\t\t%s",der->ad);
        printf("\n\tSoyadi:\t\t\t%s",der->soyad);
        printf("\n\tHizmet_yilimiz:\t\t\t%d\n\n",der->hizmet_yilimiz);
        der=der->next;
        
    }
    printf("\n\n");
}
    
void main()
{
    int secim, oncelik_Numarasi,hizmet_yilimiz=0;
    char ad[20],soyad[20];
    front=rear=NULL;
    do
    {
        printf("\n 1. Yeni gelen musteri kaydi");
        printf("\n 2. Siradaki musteriyi Cagir");
        printf("\n 3. musteri Listesi ");
        printf("\n 4. Cikis");
     
        printf("\n Seciniz:");
        scanf("%d",&secim);
        printf("\n\n");
     
        switch(secim)
        {
            case 1:
                printf("0-)Engelli musterilerimiz...\n");
                printf("1-)10 yil ve üzeri bizimle olan musterilerimiz...\n");
                printf("2-)Bankamizin hesabi olan musterilerimiz...\n");
                printf("3-)Musteri temsilcisi ile gorusmek icin...\n");
                
                printf("\nLutfen islem yapmak icin Secim Yapiniz!!! : ");
                scanf("%d",&oncelik_Numarasi);
                
                printf("Adi: ");
                scanf("%s",ad);
                
                printf("\nSoyadi: ");
                scanf("%s",soyad);
            
                printf("\nhizmet_yilimiz: ");
                scanf("%d",&hizmet_yilimiz);
                
                enqueue(oncelik_Numarasi,ad,soyad,hizmet_yilimiz);
                display();
                break;
                   case 2:
                dequeue();
                break;
            case 3:
                display();
                break;
            case 4:
                printf("isleminiz bitiyor!!!");
                getch();
                //exit(0);
        }
    }while(secim!=4);
    system("color ce");
}
     
   
 

Cevap Yaz

Cevap yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git