ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கை செயல்படுத்தவும்


சிரமம் நிலை எளிதாக
அடிக்கடி கேட்கப்படுகிறது அமேசான் ஃபோர்கைட்டுகள் கூகிள் இன்போசிஸ் MAQ மைக்ரோசாப்ட்
வரிசையில் ஸ்டேக்

சிக்கல் அறிக்கை

“ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கைச் செயல்படுத்துங்கள்” என்ற சிக்கல் ஒரு வரிசை (FIFO) தரவு கட்டமைப்பைப் பயன்படுத்தி ஒரு அடுக்கு (LIFO) தரவு கட்டமைப்பை செயல்படுத்தும்படி கேட்கிறது.

இங்கே LIFO என்பது ஃபர்ஸ்ட் அவுட்டில் கடைசி என்று பொருள், FIFO என்றால் முதல் முதல் முதல் பொருள்.

ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கை செயல்படுத்தவும்

உதாரணமாக

push(10)
push(20)
top()
pop()
push(30)
pop()
top()
Top : 20
Pop : 20
Pop : 30
Top : 10
push(1)
push(2)
top()
pop()
Top : 2
Pop : 2

விளக்கம்

எங்களிடம் ஒரு வரிசை இருக்கிறது என்று வைத்துக்கொள்வோம், இப்போது அதில் கூறுகளைச் சேர்க்கத் தொடங்குகிறோம். எனவே அதில் கூறுகளைச் சேர்க்க அல்லது செருகுவதற்காக. நாங்கள் அழைக்கிறோம் மிகுதி செயல்பாடு.

push (1) —————> வரிசையின் தற்போதைய நிலை -> 1

push (2) —————> வரிசையின் தற்போதைய நிலை -> 2,1

இதைச் செய்வதற்கு, முன்பு வரிசையில் இருந்த எல்லா உறுப்புகளையும் அகற்றுவோம். எங்கள் புதிய உறுப்பை வெற்று வரிசையில் செருகுவோம். அகற்றப்பட்ட கூறுகளை மீண்டும் அதே வரிசையில் தள்ளுகிறோம்.

வரிசையின் மேல் / முன் பகுதியைப் பார்த்தால், இதன் விளைவாக நமக்கு 2 கிடைக்கிறது.

q.top () = 2

மேல் உறுப்பை அகற்றுவோம். எனவே வரிசையில் இருந்து 2 ஐ அகற்றுகிறோம்.

எனவே அகற்றப்பட்ட பிறகு, வரிசையின் தற்போதைய நிலை = 1.

ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கை செயல்படுத்த வழிமுறை

  1. A உடன் வகுப்பு அடுக்கைத் தொடங்கவும் வரிசையில் தரவு கட்டமைப்பு முழு தனிப்பட்ட உறுப்பினராக தட்டச்சு செய்க. நாமும் வரையறுக்கிறோம் மிகுதி, பாப், மேல், மற்றும் காலியாக இது பொது உறுப்பினர் செயல்பாடுகள் என்பதால்.
  2. செயல்பாட்டை காலியாக உருவாக்கவும் (). வரிசை காலியாக இருந்தால் உண்மைக்குத் திரும்புக.
  3. மிகுதி () ஒரு முழு மதிப்பை ஏற்றுக்கொள்கிறது. ஒரு முழு எண் மாறியை உருவாக்கி, வரிசையின் அளவை மாறியில் சேமித்து, வரிசையில் முழு எண் மாறியை தள்ள / செருகவும்.
  4. 0 முதல் வரிசையின் முந்தைய அளவு வரை பயணிக்கவும். வரிசையின் தற்போதைய முன்பக்கத்தைத் தானே செருகிக் கொண்டு அதை அகற்றிக் கொண்டே இருங்கள்.
  5. வரிசையில் எந்த உறுப்பு இல்லையா என்பதைச் சரிபார்க்கும் பாப் () என்ற செயல்பாட்டை உருவாக்கி, பின்னர் “உறுப்புகள் இல்லை” என்று அச்சிட்டு -1 திரும்பவும். வேறு பாப் / மேல் / முன் உறுப்பை அகற்று.
  6. வரிசையில் எந்த உறுப்பு இல்லாவிட்டால் -1 ஐத் தரும் செயல்பாட்டு மேல் () ஐ உருவாக்குகிறோம்.

குறியீடு

ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கை செயல்படுத்த சி ++ நிரல்

#include<bits/stdc++.h> 
using namespace std; 
  
class Stack{ 
    queue<int>q;
    
public: 
    void push(int val); 
    int pop(); 
    int top(); 
    bool empty(); 
}; 
  
void Stack::push(int val){ 
    int s = q.size(); 
  
    q.push(val); 
  
    for(int i=0; i<s; i++){ 
        q.push(q.front()); 
        q.pop(); 
    } 
} 
  
int Stack::pop(){ 
    if(q.empty()){ 
        cout<<"No elements\n";
        return -1;
    }    
    else{
        int x = q.front();
        q.pop();
        return x;
    }  
} 
  
int  Stack::top(){ 
    return (q.empty())? -1 : q.front(); 
} 
  
bool Stack::empty(){ 
    return (q.empty()); 
} 
  
int main(){ 
    Stack s;
    
    s.push(10); 
    s.push(20); 
    cout<<"Top : "<<s.top()<<endl; 
    cout<<"Pop : "<<s.pop()<<endl; 
    s.push(30); 
    cout<<"Pop : "<<s.pop()<<endl;
    cout<<"Top : "<<s.top()<<endl; 

    return 0; 
}
Top : 20
Pop : 20
Pop : 30
Top : 10

ஒற்றை வரிசையைப் பயன்படுத்தி ஒரு அடுக்கை செயல்படுத்த ஜாவா நிரல்

import java.util.LinkedList; 
import java.util.Queue; 
  
class stack{ 
    Queue<Integer> q = new LinkedList<Integer>(); 
      
    void push(int val){ 
        int size = q.size(); 
          
        q.add(val); 
          
        for(int i=0; i<size; i++){ 
            int x = q.remove(); 
            q.add(x); 
        } 
    } 
      
    int pop(){ 
        if (q.isEmpty()){ 
            System.out.println("No elements"); 
            return -1; 
        } 
        int x = q.remove(); 
        return x; 
    } 
      
    int top(){ 
        if (q.isEmpty()) 
            return -1; 
        return q.peek(); 
    } 
      
    boolean isEmpty(){ 
        return q.isEmpty(); 
    } 
  
    public static void main(String[] args){ 
        stack s = new stack(); 
        
        s.push(10); 
        s.push(20); 
        System.out.println("Top : " + s.top()); 
        System.out.println("Pop : " + s.pop()); 
        s.push(30); 
        System.out.println("Pop : " + s.pop()); 
        System.out.println("Top : " + s.top());
        
    } 
}
Top : 20
Pop : 20
Pop : 30
Top : 10

சிக்கலான பகுப்பாய்வு

நேர சிக்கலானது

மிகுதி () செயல்பாடு எடுக்கிறது ஓ (n) பாப் () மற்றும் மேல் () செயல்பாடுகளுக்கு நிலையான நேரம் மட்டுமே தேவைப்படும் நேரம் ஓ (1). ஏனெனில் ஒரு உறுப்பை தள்ளுவதற்கு நாம் ஏற்கனவே இருந்த உறுப்புகளின் எண்ணிக்கையை அகற்றி சேர்க்கிறோம். இது செயல்பாட்டை பல்லுறுப்புறுப்பு நேரத்தில் இயக்க வைக்கிறது.

விண்வெளி சிக்கலானது

ஓ (n) ஏனென்றால் n உறுப்புகளின் எண்ணிக்கையை சேமிக்க இடத்தைப் பயன்படுத்துகிறோம்.