Andmete struktuuri ja rakenduse virnastamine Pythonis, Java-s ja C / C ++ -s

Selles õpetuses saate teada virna andmestruktuuri ja selle rakendamise kohta Pythonis, Java'is ja C / C ++ -s.

Virn on programmeerimisel kasulik andmestruktuur. See on justkui üksteise peal hoitud taldrikuhunnik.

Virna kujutis sarnaneb plaadihunnikuga

Mõelge asjadele, mida saate sellise plaadihunnikuga teha

  • Pange uus plaat peal
  • Eemaldage pealmine plaat

Kui soovite, et plaat oleks põhjas, peate kõigepealt eemaldama kõik peal olevad plaadid. Sellist korda nimetatakse viimane Esimese Out - viimane punkt, mis on esimene kirje minema.

LIFO virna põhimõte

Programmeerimise mõttes nimetatakse üksuse panemist virna kohale tõukamiseks ja üksuse eemaldamist popiks .

Stack Push ja Pop operatsioonid

Ehkki ülaltoodud pildil hoiti viimast üksust, eemaldati see kõigepealt - seega järgib see põhimõtet Last In First Out (LIFO) .

Saame rakendada virna mis tahes programmeerimiskeeles, nagu C, C ++, Java, Python või C #, kuid spetsifikatsioon on üsna sama.

Virna põhitoimingud

Virn on objekt (abstraktne andmetüüp - ADT), mis võimaldab järgmisi toiminguid:

  • Lükake : lisage virna ülaossa element
  • Pop : eemaldage virna ülaosast element
  • IsEmpty : kontrollige, kas virn on tühi
  • IsFull : kontrollige, kas virn on täis
  • Peek : saate ülemise elemendi väärtuse seda eemaldamata

Virnaandmete struktuuri töötamine

Toimingud toimivad järgmiselt:

  1. Virna ülemise elemendi jälgimiseks kasutatakse kursorit nimega TOP.
  2. Virna initsialiseerimisel määrasime selle väärtuseks -1, et saaksime võrrelda, kas virn on tühi TOP == -1.
  3. Elemendi tõukamisel suurendame TOPi väärtust ja asetame uue elemendi positsiooni, millele TOP osutab.
  4. Elemendi avamisel tagastame elemendi, millele TOP osutab, ja vähendame selle väärtust.
  5. Enne surumist kontrollime, kas virn on juba täis
  6. Enne hüppamist kontrollime, kas virn on juba tühi
Virnaandmete struktuuri töötamine

Virnastage rakendused Pythonis, Java-s, C-s ja C ++

Kõige tavalisem korstna juurutamine on massiivide kasutamine, kuid seda saab rakendada ka loendite abil.

Python Java C C +
 # Stack implementation in python # Creating a stack def create_stack(): stack = () return stack # Creating an empty stack def check_empty(stack): return len(stack) == 0 # Adding items into the stack def push(stack, item): stack.append(item) print("pushed item: " + item) # Removing an element from the stack def pop(stack): if (check_empty(stack)): return "stack is empty" return stack.pop() stack = create_stack() push(stack, str(1)) push(stack, str(2)) push(stack, str(3)) push(stack, str(4)) print("popped item: " + pop(stack)) print("stack after popping an element: " + str(stack)) 
 // Stack implementation in Java class Stack ( private int arr(); private int top; private int capacity; // Creating a stack Stack(int size) ( arr = new int(size); capacity = size; top = -1; ) // Add elements into stack public void push(int x) ( if (isFull()) ( System.out.println("OverFlowProgram Terminated"); System.exit(1); ) System.out.println("Inserting " + x); arr(++top) = x; ) // Remove element from stack public int pop() ( if (isEmpty()) ( System.out.println("STACK EMPTY"); System.exit(1); ) return arr(top--); ) // Utility function to return the size of the stack public int size() ( return top + 1; ) // Check if the stack is empty public Boolean isEmpty() ( return top == -1; ) // Check if the stack is full public Boolean isFull() ( return top == capacity - 1; ) public void printStack() ( for (int i = 0; i <= top; i++) ( System.out.println(arr(i)); ) ) public static void main(String() args) ( Stack stack = new Stack(5); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.pop(); System.out.println("After popping out"); stack.printStack(); ) )
 // Stack implementation in C #include #include #define MAX 10 int count = 0; // Creating a stack struct stack ( int items(MAX); int top; ); typedef struct stack st; void createEmptyStack(st *s) ( s->top = -1; ) // Check if the stack is full int isfull(st *s) ( if (s->top == MAX - 1) return 1; else return 0; ) // Check if the stack is empty int isempty(st *s) ( if (s->top == -1) return 1; else return 0; ) // Add elements into stack void push(st *s, int newitem) ( if (isfull(s)) ( printf("STACK FULL"); ) else ( s->top++; s->items(s->top) = newitem; ) count++; ) // Remove element from stack void pop(st *s) ( if (isempty(s)) ( printf(" STACK EMPTY "); ) else ( printf("Item popped= %d", s->items(s->top)); s->top--; ) count--; printf(""); ) // Print elements of stack void printStack(st *s) ( printf("Stack: "); for (int i = 0; i items(i)); ) printf(""); ) // Driver code int main() ( int ch; st *s = (st *)malloc(sizeof(st)); createEmptyStack(s); push(s, 1); push(s, 2); push(s, 3); push(s, 4); printStack(s); pop(s); printf("After popping out"); printStack(s); )
 // Stack implementation in C++ #include #include using namespace std; #define MAX 10 int size = 0; // Creating a stack struct stack ( int items(MAX); int top; ); typedef struct stack st; void createEmptyStack(st *s) ( s->top = -1; ) // Check if the stack is full int isfull(st *s) ( if (s->top == MAX - 1) return 1; else return 0; ) // Check if the stack is empty int isempty(st *s) ( if (s->top == -1) return 1; else return 0; ) // Add elements into stack void push(st *s, int newitem) ( if (isfull(s)) ( printf("STACK FULL"); ) else ( s->top++; s->items(s->top) = newitem; ) size++; ) // Remove element from stack void pop(st *s) ( if (isempty(s)) ( printf(" STACK EMPTY "); ) else ( printf("Item popped= %d", s->items(s->top)); s->top--; ) size--; cout << endl; ) // Print elements of stack void printStack(st *s) ( printf("Stack: "); for (int i = 0; i < size; i++) ( cout 

Stack Time Complexity

For the array-based implementation of a stack, the push and pop operations take constant time, i.e. O(1).

Applications of Stack Data Structure

Although stack is a simple data structure to implement, it is very powerful. The most common uses of a stack are:

  • To reverse a word - Put all the letters in a stack and pop them out. Because of the LIFO order of stack, you will get the letters in reverse order.
  • In compilers - Compilers use the stack to calculate the value of expressions like 2 + 4 / 5 * (7 - 9) by converting the expression to prefix or postfix form.
  • In browsers - The back button in a browser saves all the URLs you have visited previously in a stack. Each time you visit a new page, it is added on top of the stack. When you press the back button, the current URL is removed from the stack, and the previous URL is accessed.

Huvitavad Artiklid...