İki sətri müqayisə edin (əlaqəli siyahılar)


SimBaxılıb 534

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Siyahının hər bir düyününün simvol olduğu verilmiş iki əlaqəli siyahıda. Onları müqayisə etmək üçün bir funksiya yazmalıyıq.

1. Hər iki sətir eynidirsə 0 çıxarın.

2. List1 leksikoqrafiya baxımından List1-dən böyükdürsə, nəticə 2

3. List1 leksikoqrafiya baxımından List2-dən böyükdürsə, Çıxış -1

Leksikoqrafik və ya leksikoqrafiya düzəni (leksik qayda, lüğət sırası, əlifba sırası və ya leksikoqrafik (al) məhsulu kimi də bilinir) sözlərin əlifba sırasının tərkib hissələrinin əlifba sırasına əsaslanmasının ümumiləşdirilməsidir.

Nümunələr

Alqoritm

a. LL-ni elə yaradın ki, hər bir qovşaq simvol dəyərini və sonrakı ünvanını tutsun

b. Müqayisə funksiyasında hər iki siyahını da keçin

      1. List1, List2-dən əlavə bir xarakter daşıyırsa, 1-i qaytarın.

      2. List2, List1-dən əlavə bir xarakter daşıyırsa, -1-ə qayıdın.

      3. List1 simvolu asci eyni vəziyyətdə olan List2 simvolundan yüksəksə, onda 1-i qaytarın.

      4. List2 simvolu asci eyni vəziyyətdə olan List1 simvolundan yüksəksə, onda -1 qaytarın.

      5. Döngü sona çatırsa, bu, eyni sayda simvol və eyni simvol var deməkdir, 0-a qayıdın.

c. Verilən iki siyahıdakı funksiyaya zəng edin.

C ++ Proqramı

#include <bits/stdc++.h>

using namespace std;

struct LLNode
{
    char data;
    struct LLNode* next;
};

 
/* Function to insertAtBeginning a node */
void insertAtBeginning(struct LLNode** head, char dataToBeInserted)
{
    struct LLNode* curr = new LLNode;
    curr->data = dataToBeInserted;
    curr->next = NULL;    
    if(*head == NULL)
            *head=curr; //If this is first node make this as head of list
        
    else
        {
            curr->next=*head; //else make the curr (new) node's next point to head and make this new node a the head
            *head=curr;
        }
        
        //O(1) constant time
}
 
//display linked list
void display(struct LLNode**node)
{
    struct LLNode *temp= *node;
    while(temp!=NULL)
        {
            if(temp->next!=NULL)
            cout<<temp->data<<" ->";
            else
            cout<<temp->data;
            
            temp=temp->next; //move to next node
        }
        //O(number of nodes)
    cout<<endl;
}
 
int CompareStrings(struct LLNode *List1,struct LLNode *List2) 
{    
    //Traverse the arrays till the end
    while (List1 && List2 && List1->data == List2->data) 
    {         
        List1 = List1->next;
        List2 = List2->next;
    }
     
    //Non-empty lists
    if (List1 && List2)
    {
        //CompareStrings characters 
        if (List1->data > List2->data)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
    //list2 reaches end before list1
    if(List1 && !List2)
    { 
        return 1;
    }
    //list1 reaches end before list2
    if(List2 && !List1)
    { 
        return -1;
    }
    //If both are same
    //It reaches end. 
    return 0;
}
 
//Main function
int main()
{
    //List 1
    struct LLNode *List1 = NULL;
    insertAtBeginning(&List1,'a');
    insertAtBeginning(&List1,'l');
    insertAtBeginning(&List1,'l');
    insertAtBeginning(&List1,'e');
    insertAtBeginning(&List1,'h');
    cout<<"List1 is: ";
    display(&List1);
 
    //List 2
    struct LLNode *List2 = NULL;
    insertAtBeginning(&List2,'b');
    insertAtBeginning(&List2,'l');
    insertAtBeginning(&List2,'l');
    insertAtBeginning(&List2,'e');
    insertAtBeginning(&List2,'h');
    cout<<"List2 is: ";
    display(&List2);
  
    cout<<"Final output is: ";
    cout << CompareStrings(List1, List2);
    return 0;
}

 

Crack Sistemi Dizayn Müsahibələri
Translate »