{"id":18664995,"url":"https://github.com/arnavbee/stacks","last_synced_at":"2025-10-10T09:51:45.204Z","repository":{"id":250486924,"uuid":"834598536","full_name":"arnavbee/stacks","owner":"arnavbee","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-01T18:42:57.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-18T05:31:48.659Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arnavbee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-27T18:58:19.000Z","updated_at":"2024-08-01T12:16:19.000Z","dependencies_parsed_at":"2024-07-31T15:46:01.462Z","dependency_job_id":"6313945b-d7e4-461f-9d28-569e7aee00d6","html_url":"https://github.com/arnavbee/stacks","commit_stats":null,"previous_names":["arnavbee/stack-ds"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arnavbee/stacks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavbee%2Fstacks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavbee%2Fstacks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavbee%2Fstacks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavbee%2Fstacks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arnavbee","download_url":"https://codeload.github.com/arnavbee/stacks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnavbee%2Fstacks/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267436407,"owners_count":24086897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T08:25:49.561Z","updated_at":"2025-10-10T09:51:40.175Z","avatar_url":"https://github.com/arnavbee.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stacks \nStack is a data structure to store data and follows the property of LIFO (Last In First Out).\n\nFollowing operations can be performed on the stack data structure:\n\n-   push -\u003e to insert -\u003e s.push();\n-   pop -\u003e to delete -\u003e s.pop();\n-   top -\u003e to view the topmost/last value in the stack -\u003e s.top();\n\n---\n\n## Stack Implementation\nStack Implementation using class can be done in two ways:\n- Array\n- Linked List\n\n## Stack Implementation Using Class\n\nBasic flow of the stack using array\n\n    class Stack {\n     \n    // properties\n     \n    public: \n    int *arr; \n    int top; \n    int size; \n    \n    //behaviour - constructor\n     \n    Stack(int size) { \n    this -\u003e size = size; \n    arr = new int[size]; \n    top = -1; \n    } \n    \n    void push(int element){ \n    \n    } \n    \n    void pop(){\n    \n     } \n     \n     int peek(){ \n     \n     } \n     \n     bool isEmpty(){ \n     \n     } \n     };\n\n\n## Question Links\n\n### Implementing Two Stacks: \n(https://www.naukri.com/code360/problems/two-stacks_983634)\n\nCode:\n\n#include \u003cbits/stdc++.h\u003e \nclass TwoStack {\n\n    int *arr;\n    int top1;\n    int top2;\n    int size;\n\npublic:\n\n    // Initialize TwoStack.\n    TwoStack(int s) {\n        this-\u003esize = s;\n        top1 = -1;\n        top2 = s;\n        arr = new int[s];\n    }\n\n    // Destructor to clean up allocated memory\n    ~TwoStack() {\n        delete[] arr;\n    }\n    \n    // Push in stack 1.\n    void push1(int num) {\n        if (top2 - top1 \u003e 1) {  // Corrected the condition\n            top1++;\n            arr[top1] = num;\n        }\n    }\n\n    // Push in stack 2.\n    void push2(int num) {\n        if (top2 - top1 \u003e 1) {  // Corrected the condition\n            top2--;\n            arr[top2] = num;\n        }\n    }\n    \n    // Pop from stack 1 and return popped element.\n    int pop1() {\n        if (top1 \u003e= 0) {\n            int ans = arr[top1];\n            top1--;\n            return ans;\n        } else {\n            return -1;\n        }\n    }\n\n    // Pop from stack 2 and return popped element.\n    int pop2() {\n        if (top2 \u003c size) {\n            int ans = arr[top2];\n            top2++;\n            return ans;\n        } else {\n            return -1;\n        }\n    }\n};\n\n\n## Implementing Queue using Two Stacks \n(https://leetcode.com/problems/implement-queue-using-stacks/description/)\n\nCreate two stacks s1 and s2.\n\nCode follows the basic flow of three steps:\n\n- s1 -\u003e s2\n- x -\u003e s1\n- s2 -\u003e s1\n\n### Time Complexity - O(n)\n\nclass MyQueue {\npublic:\n     stack\u003cint\u003e s1, s2;\n    \n    void push(int x) {\n\n        while(s1.size()){\n            s2.push(s1.top());\n            s1.pop();\n        }\n\n        s1.push(x);\n\n        while(s2.size()){\n            s1.push(s2.top());\n            s2.pop();\n        }\n        \n    }\n    \n    int pop() {\n\n    int popp = s1.top();\n    s1.pop();\n    return popp;\n    \n        \n    }\n    \n    int peek() {\n    int popp = s1.top();\n    return popp;\n    \n        \n    }\n    \n    bool empty() {\n    if(s1.empty() \u0026\u0026 s2.empty()){\n        return true;\n    }\n\n    else return false;\n        \n    }\n};\n\n\n### Time Complexity - O(1)\n\nclass MyQueue {\npublic:\n    stack\u003cint\u003e s1, s2;\n\n    void push(int x) {\n        s1.push(x);\n    }\n    \n    int pop() {\n        if (s2.empty()) {\n            while (!s1.empty()) {\n                s2.push(s1.top());\n                s1.pop();\n            }\n        }\n        int top = s2.top();\n        s2.pop();\n        return top;\n    }\n    \n    int peek() {\n        if (s2.empty()) {\n            while (!s1.empty()) {\n                s2.push(s1.top());\n                s1.pop();\n            }\n        }\n        return s2.top();\n    }\n    \n    bool empty() {\n        return s1.empty() \u0026\u0026 s2.empty();\n    }\n};\n\n\n## Valid Parenthesis  \n(https://leetcode.com/problems/valid-parentheses/)\n\n#include \u003cstack\u003e\n#include \u003cstring\u003e\n\nclass Solution {\npublic:\n    bool isValid(std::string s) {\n        std::stack\u003cchar\u003e st;\n        int n = s.size();\n\n        for (int i = 0; i \u003c n; i++) {\n            if (s[i] == '(' || s[i] == '[' || s[i] == '{') {\n                st.push(s[i]);\n            } else {\n                if (st.empty()) return false;\n\n                char ch = st.top();\n                st.pop();\n\n                if ((s[i] == ')' \u0026\u0026 ch != '(') || \n                    (s[i] == '}' \u0026\u0026 ch != '{') || \n                    (s[i] == ']' \u0026\u0026 ch != '[')) {\n                    return false;\n                }\n\n             \n            }\n        }\n\n        return st.empty();\n    }\n};\n\n\n### LRU Cache\n\nCode::\n\nclass LRUCache {\npublic:\n    list\u003cint\u003e dll; \n    map\u003cint, pair\u003clist\u003cint\u003e::iterator, int\u003e\u003e cache; \n    int capacity;\n    \n    LRUCache(int capacity) {\n        this-\u003ecapacity = capacity;\n    }\n    \n    void makeMostRecentlyUsed(int key) {\n        dll.erase(cache[key].first);\n        dll.push_front(key);\n        cache[key].first = dll.begin();\n    }\n    \n    int get(int key) {\n        if(!cache.count(key))\n            return -1;\n        \n        makeMostRecentlyUsed(key);\n        return cache[key].second;\n    }\n    \n    void put(int key, int value) {\n        if(cache.count(key)) {\n            cache[key].second = value;\n            makeMostRecentlyUsed(key);\n        } else {\n            dll.push_front(key);\n            cache[key] = {dll.begin(), value};\n            capacity--;\n        }\n        \n        if(capacity \u003c 0) {\n            cache.erase(dll.back());\n            dll.pop_back();\n            capacity++;\n        }\n    }\n};\n\n\n### Minimum Stack\n\nCode:\n\n#include \u003cstack\u003e\n#include \u003climits\u003e\n\nclass MinStack {\npublic:\n    std::stack\u003cint\u003e st;\n    std::stack\u003cint\u003e minStack;\n\n    MinStack() {\n    }\n    \n    void push(int val) {\n        st.push(val);\n\n        if (minStack.empty() || val \u003c= minStack.top()) {\n            minStack.push(val);\n        }\n    }\n    \n    void pop() {\n        if (st.empty()) return;\n\n        int topElem = st.top();\n        st.pop();\n\n        if (topElem == minStack.top()) {\n            minStack.pop();\n        }\n    }\n    \n    int top() {\n        if (st.empty()) return -1; \n        return st.top();\n    }\n    \n    int getMin() {\n        if (minStack.empty()) return -1; \n        return minStack.top();\n    }\n};\n\n\n\nAlternate Solution:\n\nclass MinStack {\npublic:\n\nint minEle;\n\nstack\u003cint\u003e st;\n\n\n    MinStack() {\n        \n    }\n    \n    void push(int val) {\n        if(st.size() == 0){\n            st.push(val);\n            minEle = val;\n        }\n\n        else {\n            if(val \u003e= minEle){\n                st.push(val);\n            }\n\n            else if(val \u003c minEle){\n                st.push(2 * val - minEle);\n                minEle = val;\n            }\n        }\n        \n    }\n    \n    void pop() {\n\n        if(st.size() == 0)\n        return;\n\n        else {\n            if(st.top() \u003e minEle){\n                st.pop();\n            }\n\n            else if(st.top() \u003c= minEle){\n                minEle = 2 * minEle - st.top();\n                st.pop();\n            }\n        }\n        \n    }\n    \n    int top() {\n\n        int topp = st.top();\n        return topp;\n        \n    }\n    \n    int getMin() {\n\n        if(st.size() == 0){\n            return minEle;\n        }\n\n        else return minEle;\n\n\n        \n    }\n};\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnavbee%2Fstacks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnavbee%2Fstacks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnavbee%2Fstacks/lists"}