{"id":31850057,"url":"https://github.com/roseewood/dsa","last_synced_at":"2026-05-08T03:39:52.039Z","repository":{"id":316793675,"uuid":"1049530507","full_name":"roseewood/DSA","owner":"roseewood","description":"Learn Data Structures and Algorithms","archived":false,"fork":false,"pushed_at":"2025-09-26T17:45:00.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-26T19:27:18.966Z","etag":null,"topics":["c","cpp","data-structures-and-algorithms","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roseewood.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-03T05:49:15.000Z","updated_at":"2025-09-26T17:47:39.000Z","dependencies_parsed_at":"2025-09-26T19:27:22.899Z","dependency_job_id":null,"html_url":"https://github.com/roseewood/DSA","commit_stats":null,"previous_names":["roseewood/dsa"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/roseewood/DSA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roseewood%2FDSA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roseewood%2FDSA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roseewood%2FDSA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roseewood%2FDSA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roseewood","download_url":"https://codeload.github.com/roseewood/DSA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roseewood%2FDSA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011198,"owners_count":26084899,"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-10-12T02:00:06.719Z","response_time":53,"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":["c","cpp","data-structures-and-algorithms","python"],"created_at":"2025-10-12T11:16:33.997Z","updated_at":"2026-05-08T03:39:52.028Z","avatar_url":"https://github.com/roseewood.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eData Structures and Algorithm\u003c/h1\u003e\n\u003ch1 align=\"center\"\u003eIntroduction\u003c/h1\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eWhat are Data Structures?\u003c/h1\u003e\n\n\u003ch2\u003eData\u003c/h2\u003e\n\u003cp\u003e\nData is information that has been translated or converted into binary digital form\nso that it can be efficiently processed or moved in computing systems.\n\u003c/p\u003e\n\n\u003cp\u003e\nThe term \u003cstrong\u003eraw data\u003c/strong\u003e refers to data in its most basic and unprocessed form.\n\u003c/p\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eWhy Do We Need Data Structures?\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eEach data structure allows data to be stored differently.\u003c/li\u003e\n\u003cli\u003eIt enables efficient data search and retrieval.\u003c/li\u003e\n\u003cli\u003eSpecific data structures are chosen to solve specific problems.\u003c/li\u003e\n\u003cli\u003eDS enables the management of  large amounts of data such as large databases and indexing services like hash tables.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e\u003cb\u003eExamples\u003c/b\u003e\u003c/h2\u003e\n\n\u003ch3\u003eLinked List Data Structure\u003c/h3\u003e\n\u003cp\u003e\nIf we have a playlist with three songs, the second song plays after the first,\nand the third song plays after the second because all songs are linked as nodes in a linked list.\n\u003c/p\u003e\n\n\u003ch3\u003eStack Data Structure\u003c/h3\u003e\n\u003cp\u003e\nIn a stack of books, we must remove the topmost book before accessing the desired book.\nTo add a new book, we place it on the top.\nIt follows the \u003cstrong\u003eLIFO (Last In, First Out)\u003c/strong\u003e principle.\n\u003c/p\u003e\n\n\u003ch3\u003eQueue Data Structure\u003c/h3\u003e\n\u003cp\u003e\nAny traditional queue follows the \u003cstrong\u003eFIFO (First In, First Out)\u003c/strong\u003e principle.\nThe first element inserted is the first one removed.\n\u003c/p\u003e\n\n\u003ch3\u003eGraph Data Structure\u003c/h3\u003e\n\u003cp\u003e\nGoogle Maps works like a graph where locations are connected and multiple paths exist.\nAlgorithms can be used to find the shortest path.\n\u003c/p\u003e\n\n\u003ch3\u003eArray Data Structure\u003c/h3\u003e\n\u003cp\u003e\nIf searching for the word “simplilearn” in a dictionary, we look under the letter “s”.\nArrays allow indexed and ordered access.\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eTypes of Data Structures\u003c/h1\u003e\u003cbr\u003e\n\n\u003ch2\u003e1. Linear Data Structure\u003c/h2\u003e\n\u003cp\u003e\nElements are arranged sequentially one after another.\nThey are simple to implement because the order is fixed.\n\u003c/p\u003e\n\n\u003ch3\u003eArray Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eElements are stored in continuous memory locations.\u003c/li\u003e\n\u003cli\u003eAll elements are of the same data type.\u003c/li\u003e\n\u003cli\u003eThe data type is predefined by the program.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cpre\u003e\n┌─┐ ┌─┐ ┌─┐\n│4│ │8│ │2│\n└─┘ └─┘ └─┘\n 0   1   2\n\u003c/pre\u003e\n\n\u003ch3\u003eLinked List Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eData elements are connected using nodes.\u003c/li\u003e\n\u003cli\u003eEach node contains data and the address of the next node.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cpre\u003e\n┌─┬─┐        ┌─┬─┐\n│8│ │        │ │ │\n└─┴─┘        └─┴─┘\n(Head)      (Null)\n\u003c/pre\u003e\n\n\u003ch3\u003eStack Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFollows LIFO (Last In, First Out) principle.\u003c/li\u003e\n\u003cli\u003eOperations occur at one end called the top.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cpre\u003e\n         Push ↘      ↗  Pop \n                ┌─┐\n    Top →       │5│\n                └─┘\n                ┌─┐\n                │7│\n                └─┘\n                ┌─┐\n                │4│\n                └─┘\n\u003c/pre\u003e\n\n\u003ch3\u003eQueue Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFollows FIFO (First In, First Out) principle.\u003c/li\u003e\n\u003cli\u003eInsertion and deletion occur at opposite ends.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n    Insertion ↘\n                ┌─┐ ┌─┐ ┌─┐\n                │5│ │7│ │4│\n                └─┘ └─┘ └─┘\n                            ↖ Deletion\n\u003c/pre\u003e\n\n\u003ch2\u003e2. Non-Linear Data Structures\u003c/h2\u003e\n\u003cp\u003e\nElements are not arranged sequentially.\nThey are organized hierarchically or interconnected.\n\u003c/p\u003e\n\n\u003ch3\u003eTree Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe top node is called the \u003cstrong\u003eroot\u003c/strong\u003e.\u003c/li\u003e\n\u003cli\u003eEach node can have zero or more children.\u003c/li\u003e\n\u003cli\u003eNodes with no children are called \u003cstrong\u003eleaves\u003c/strong\u003e.\u003c/li\u003e\n\u003cli\u003eEach child has exactly one parent except the root.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cpre\u003e\n             →\n        (8)──────(5)\n         │        │\n      ↓  │        │ ↑      [8 ↘ 9]\n         │        │\n        (2)──────(9)\n             →\n\u003c/pre\u003e\n\n\u003ch3\u003eGraph Data Structure\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConsists of nodes (vertices) and edges.\u003c/li\u003e\n\u003cli\u003eCan be directed or undirected.\u003c/li\u003e\n\u003cli\u003eCan be weighted or unweighted.\u003c/li\u003e\n\u003cli\u003eCan be cyclic or acyclic.\u003c/li\u003e\n\u003cli\u003eCan be connected or disconnected.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n             (9)\n        ↙   /   \\   ↘\n           /     \\\n        (6)      (5)\n\u003c/pre\u003e\n\n\u003ch1 align=\"center\"\u003eImportance\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eWidely used in almost every aspect of computer science.\u003c/li\u003e\n\u003cli\u003eUsed in AI, graphics, big data, and operating systems.\u003c/li\u003e\n\u003cli\u003eEssential component of algorithms.\u003c/li\u003e\n\u003cli\u003eProper selection improves program efficiency.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eTime Complexity\u003c/h1\u003e\n\n\u003cp\u003e\nTime Complexity is the amount of time an algorithm takes to run as a function of input size.\nThe length of the input determines how many operations the algorithms will do.\u003cbr\u003e\nIt will provide information about the variance ( increase or decrease) in execution time as the no. of operations in an algorithm increases or decreases.\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003eTypes of Time Complexity\u003c/h2\u003e\n\n\u003ch2\u003e1. Constant Time — O(1)\u003c/h4\u003e\n\u003cp\u003e\u003ci\u003eExecution time does not depend on input size.\u003c/i\u003e\u003cbr\u003e\nWhen an algorithm is not reliant on the input sixe n, it is said to have constant time with order 0(1).\u003cbr\u003e\nThe run time will always be same regardless of input size (n)\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nmain()\n{\n    int a;\n    print (\"Enter value of a = \");\n    scanf(\"%d\", \u0026a);\n    printf(\"a = %d\", a);\n}\n\n\u003c/pre\u003e\n\n\u003ch2\u003e2. Linear Time — O(n)\u003c/h2\u003e\n\u003cp\u003e\u003ci\u003eExecution time increases linearly with input size.\u003c/i\u003e\u003cbr\u003e\nWhen running time of an algorithm rises linearly with the length of the inpu, it is said to have linear time complexity.\n\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nmain(){\n    int a [5] = {2,3,5,7,9};\n    printf(\"elements of a = \\n\");\n    for(int i = 0; i\u003c5; i++\u003e);\n    printf(\"a= %D\", a);\n\n}\n\n\u003cb\u003eNote:\u003c/b\u003e\u003ci\u003eWhen a function checks all the values in an input data set,\u003cbr\u003e it is said to have Time complexity of order 0(n)\u003c/i\u003e\n\u003c/pre\u003e\n\n\u003ch2\u003e3. Logarithmic Time — O(log n)\u003c/h2\u003e\n\u003cp\u003e\u003ci\u003eInput size is reduced in each step. Example: Binary Search.\u003c/i\u003e\u003cbr\u003e\nWhena an algorithm lowers the amount of the input data in each step, it is said to have a logarithmic time complexity.\u003cbr\u003e\nBinary trees and binary search functions are same of the algorithm with lagarithmic time complexity.\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nint binary Search (int arr[], int 1, int r, int x){\n\n    if(r\u003ei){\n        int mid = 1 +(r-1)/2;\n        if arr[mid] == x);\n        return mid;\n\n        if (arr[mid] \u003e x);\n        return binary search (arr, 1mid -1,x);\n        return binary search(arr, mid +1,r,x);\n    }\n}\n\u003c/pre\u003e\n\n\u003ch2\u003e4. Quadratic Time — O(n²)\u003c/h2\u003e\n\u003cp\u003e\u003ci\u003eExecution time grows non-linearly, commonly seen in nested loops.\u003c/i\u003e\u003cbr\u003e\nWhen the execution time of an algorithm rises non-lineaerly (n square) with thelength of the input, it is said to have a quadratic time complexity.\u003cbr\u003e\nIn general, nested loops fall into the quadratic time complexity order, ewhere one loop takes 0(n) and if the function contains  loops inside loops, it takes\u003cbr\u003e\n0(n) * 0(n) = 0(n square)\n\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nfor (int i = 0; i\u003cn; i++\u003e);\n{\n    for (int j=0; j\u003cn;j++\u003e);\n    { \n        printf(\"%d\", arr[i][j])'\n    }\n}\n\n\u003c/pre\u003e\n\n\u003ch2 align=\"center\"\u003eHow to Evaluate Time Complexity\u003c/h2\u003e\n\n\u003cpre\u003e\n    int fib (int n)\n    {\n        \n        int f[n+2];                         +1\n        int i;                              +1\n        f[0]= 0;                            +1\n        f[1]= 1;                            +1\n\n\n        for (i =2; i\u003c=n; i++ );\n        {\n            f[1] = f[i-1] + f[i-2];         +n\n                                         \n        }\n\n\n        return f[n];                         +1\n\n\n\n    }\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nTotal time taken = n + 5\nTotal complexity = O(n + 5)\n                = O(n)\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eTime Complexity of Algorithms\u003c/h2\u003e\u003cbr\u003e\n\n\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n\u003cth\u003eAlgorithm\u003c/th\u003e\n\u003cth\u003eBest Case\u003c/th\u003e\n\u003cth\u003eWorst Case\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eInsertion Sort\u003c/td\u003e\n\u003ctd\u003eO(n)\u003c/td\u003e\n\u003ctd\u003eO(n²)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eMerge Sort\u003c/td\u003e\n\u003ctd\u003eO(n log n)\u003c/td\u003e\n\u003ctd\u003eO(n log n)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eQuick Sort\u003c/td\u003e\n\u003ctd\u003eO(n log n)\u003c/td\u003e\n\u003ctd\u003eO(n²)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eBubble Sort\u003c/td\u003e\n\u003ctd\u003eO(n)\u003c/td\u003e\n\u003ctd\u003eO(n²)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eLinear Search\u003c/td\u003e\n\u003ctd\u003eO(1)\u003c/td\u003e\n\u003ctd\u003eO(n)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eBinary Search\u003c/td\u003e\n\u003ctd\u003eO(1)\u003c/td\u003e\n\u003ctd\u003eO(log n)\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\u003cbr\u003e\n\u003ch2\u003e1. Insertion Sort\u003c/h2\u003e\n\n\u003cpre\u003e void insertion sort (int arr[], int n)\n{\n    int i, key, j;\n    for (i=1; i\u003cn; i++\u003e){\n        key = arr[i];\n        j=i=1;\n    while(j\u003e=0 \u0026\u0026 arr [j] \u003e key){\n        arr [j + 1] = arr[j];\n        j=j-1;}\n    arr [j + 1] = key;\n\n    }\n\n}   \n    \n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e2. Merge Sort\u003c/h2\u003e\n\u003cpre\u003evoid merge sort (int array[], int const begin, int const end)\n{\n    if (begin \u003e= end)\n    return; // Return recursivly\n\n    auto mid = begin + (end - begin)/2;\n    merge sort (array, begin, mid);\n    merge sort (array, mid + 1, end);\n    merge sort array, mid, begin, end;\n}\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e3. Quick Sort\u003c/h2\u003e\n\n\u003cpre\u003e\nvoid quicksort (int arr[], int low, int high)\n{\n    if (low \u003c high)\n    {\n        int pi = partition (arr, low, high);\n        //seprately sor elements before\n        //partition and after partition\n        quicksort (arr, low, pi, 1);\n        quicksort (arr, pi + 1, high);\n    }\n}\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e4. Bubble Sort\u003c/h2\u003e\n\n\u003cpre\u003e\nvoid bubble sort(int arr[], int n)\n{\n    int i, j;\n    for (i = 0; i \u003c n-1; i ++);\n    //last i elements are already place\n\n    for(j = 0; j \u003c n -i - 1; j ++\u003e);\n    if(arr [j]\u003e arr[j + 1]);\n    swap(\u0026arr [j], \u0026 arr[j+1]);\n}\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e5.Linear Search \u003c/h2\u003e\n\n\u003cpre\u003e\nint search (int arr [], int n, int x)\n{\n    int i;\n    for (i=0; i\u003cn; i++\u003e);\n    if (arr [i] == x);\n    return i;\n    return -1;\n}\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e6. Binary Search\u003c/h2\u003e\n\u003cpre\u003e\n    int binary Search (int arr[], int 1, int r, int x)\n\n    if (r \u003e=1){;\n    if (arr [mid] == x)\n        int mid = 1 + (r-1)/2;\n\n    if (arr [mid] == x)\n        return mid;\n    if (arr[mid]\u003ex)\n        return binary search (arr, 1, mid-1, x);\n        return binary search (arr, mid +1, r, x);\n    }\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eConclusion\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eThe time of the execution increases with the type of operations we make using the inputs.\u003c/li\u003e\u003cbr\u003e\n\u003cli\u003eThe lesser the time complexity, the faster the execution.\u003c/li\u003e\u003cbr\u003e\n\u003cli\u003eIn case if a code is 1000s of lines then it takes a toll on processor of the PC. So, it is important to check and reduce the time complexity as we can.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003ePointers in C\u003c/h1\u003e\n\n\u003cp\u003eA pointer is a variable to the address of another variable . If is declared along wiht an asterisk symbol (*).\u003cbr\u003e\nThe syntax to declare a pointer is as follows:\u003cbr\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003edatatype * var 1\u003c/b\u003e\u003c/p\u003e\n\n\u003cp\u003eThe syntax to Assign address of a variable to a pointer is:\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003edatatype var1, * var2\u003c/b\u003e\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n# include \u003cbits/std c++.h\u003e\nusing namespace std;\nmain()\n{\n    int a = 5, * ptr;\n    ptr = \u0026a;\n    cout \u003c\u003c \"a =\" \u003c\u003c a \u003c\u003c endl;\n    cout \u003c\u003c \"a =\" \u003c\u003c * ptr \u003c\u003c endl;\n    return 0;\n}\n\u003c/pre\u003e\n\n\u003cp\u003e\u003cb\u003eResult\u003c/b\u003e\u003cbr\u003e\na = 5\u003cbr\u003e\na = 5\u003c/p\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eTypes of Pointer\u003c/h1\u003e\n\n\u003ch2\u003e1. Null Pointer\u003c/h2\u003e\n\u003cp\u003eWhen a null value is assigned to a pointer during its declaration.\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\nint *var = NULL;\n\n# include \u003cbits/stdc++.h\u003e\nusing namespace std;\nmain()\n{\n    int *var;\n    *var = NULL;\n    cout\u003c\u003c *var;\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n\n---------------\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e2. Void Pointer\u003c/h2\u003e\n\u003cp\u003eWhen a pointer is declared with a void keyword.\u003cbr\u003e\nTo print the value we need to typecast this pointer.\u003c/p\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax:\u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003ci\u003evoid *var;\u003c/i\u003e\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n\n#include \u003cbits/stdc++.h\u003e\nusing namespace std;\nmain()\n{\n    int a = 5;\n    void *ptr;\n    ptr = \u0026a;\n+------------------+\n|   cout \u003c\u003c *ptr;  |   -------\u003e ERROR\n+------------------+\n    |  return 0;\n    |\n    |\n    |\n    |\n}   |\n    |\n    |\n    |\n\u003cb\u003eResult: \u003c/b\u003e\n\ncout\u003c\u003c *(int *) ptr;\n= 5\n \n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e3. Wild Pointer\u003c/h2\u003e\n\u003cp\u003eIt is only declared but not assigned an address of any variable. \u003cbr\u003e\nThese pointers are very tricky and they may cause segmenatation errors.\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e\nsung namespace std;\nmain()\n{\n    int *ptr;\n    cout\u003c\u003c *ptr;\n    return 0;\n}\n\n\n\u003cb\u003eResult:\u003c/b\u003e\n\n---------------\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003e4. Dangling Pointer\u003c/h2\u003e\n\u003cp\u003eLet's suppose there is a pointer p pointing at a variable at memory 10004. This pointer will point at a deleted variable if we dellocate this memory. \u003cbr\u003e\nWe deallocate memory using a free () function.\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e\nusing namespace std;\nmain()\n{\n    int *ptr = (int *)m alloc(sizeof(int));\n    int a = 5;\n    ptr = \u0026a;\n    free (ptr);\n    cout\u003c\u003c *ptr;\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n----------------\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eUse Cases\u003c/h1\u003e\n\u003ch2 align=\"center\"\u003e1. Pointer Arithmetic\u003c/h2\u003e\n\u003cp\u003e\u003cb\u003eNOTE:\u003c/b\u003e Pointer Arithemetic is of no use if not used in Arrays.\u003c/p\u003e\n\n\u003ch2\u003ei) Increment (++)\u003c/h2\u003e\n\u003cp\u003eWe can use this operator to jump from one index to the next insex in an array.\u003c/p\u003e\n\n\u003cb\u003eSyntax:\u003c/b\u003e\n\u003cp align=\"center\"\u003eptr++\u003c/p\u003e\n\n\u003cp align=\"center\"\u003earr[0] -------------\u003e arr[1]-----------\u003e arr[2]     \n\u003c/p\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e\nusing namespace.std;\nmain()\n{\n    int arr [3] = {2,3,5};\n    int *tr;\n    tr = \u0026arr [0];\n    for(int i = 0; i\u003c3; i++)\n    {\n        cout \u003c\u003c* tr\u003c\u003c end l;\n        ++;\n    }\n    return 0;\n}\n\n\n\u003cb\u003eResult:\u003c/b\u003e\n2, 3, 5\n\u003c/pre\u003e\u003cbr\u003e\n\n\n\u003ch2\u003eii) Decrement (--)\u003c/h2\u003e\n\u003cp\u003eWe use this operator to jump from one index to the previous index in an array.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eptr \u003csup\u003e --\u003c/sup\u003e\u003cbr\u003e\u003cbr\u003e\narr[2] ------------\u003e arr[1] -------------\u003e arr[0]\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n    int arr[3] = {2,3,5}\n    int *ptr;\n    ptr = \u0026 arr[2];\n    for (int i=0; i=3; i++)\n        {cout \u003c\u003c *ptr\u003c\u003c endl;\n        ptr\u003csup\u003e--\u003c/sup\u003e;\n    }\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n5, 3, 2\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003eiii) Integers added to a Pointer:\u003c/h2\u003e\n\u003cp\u003eWe use this operator to jump from one index to the next index in an array.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eptr + = i; \u003ci\u003e(where 'i' is an integer) \u003c/i\u003e \u003cbr\u003e\narr[0] ------------\u003e arr[2] -------------\u003e arr[4]\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n    int arr[7] = {2,3,5,7,11,13,17}\n    int *ptr;\n    ptr = \u0026 arr[0];\n    int n =2;\n    for (int i=0; i\u003c7\u003e; i++)\n        {cout \u003c\u003c *ptr\u003c\u003c endl;\n        ptr + n;\n    }\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n2, 5, 11, 17, 2\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003eiv) Integers subtracted from a Pointer:\u003c/h2\u003e\n\u003cp\u003eWe use this operator to jump from one index to the previous index in an array.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eptr - = i; \u003ci\u003e(where 'i' is an integer) \u003c/i\u003e \u003cbr\u003e\narr[2] ------------\u003e arr[2] -------------\u003e arr[0]\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n    int arr[7] = {2,3,5,7,11,13,17}\n    int *ptr;\n    ptr = \u0026 arr[6];\n    int n =2;\n    for (int i=0; i\u003c7\u003e; i++)\n        {cout \u003c\u003c *ptr\u003c\u003c endl;\n        ptr - n;\n    }\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n17, 11, 5, 2\n\u003c/pre\u003e\u003cbr\u003e\n\n\n\u003ch2\u003e(v) Precedence\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOperators \u003cb\u003e*\u003c/b\u003e and \u003cb\u003e\u0026\u003c/b\u003e are given the same priorities as unary operators (increment \u003cb\u003e++\u003c/b\u003e, decrement \u003cb\u003e--\u003c/b\u003e)\u003c/li\u003e\u003cbr\u003e\n\n\u003cli\u003eThe unary operators \u003cb\u003e*, \u0026, ++, --\u003c/b\u003e are ecaluated from right to left in the same expression.\u003c/li\u003e\u003cbr\u003e\n\n\u003cli\u003eIf a \u003cb\u003ep\u003c/b\u003e pointer points to and \u003ci\u003eX\u003c/i\u003e variable, then we can interchange \u003ci\u003eX\u003c/i\u003e with \u003cb\u003e*p\u003c/b\u003e.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003ctable align =\"center\"\u003e\n\u003ctr\u003e\n\u003cth\u003eExpression\u003c/th\u003e\n\u003cth\u003eEquivalent Expression\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eY = X + 1\u003c/td\u003e\n\u003ctd\u003eY = *p + 1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eX = X + 10\u003c/td\u003e\n\u003ctd\u003e*p = *p + 10\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eX + = 2\u003c/td\u003e\n\u003ctd\u003e*p += 2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e++X\u003c/td\u003e\n\u003ctd\u003e++ *p\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eX ++\u003c/td\u003e\n\u003ctd\u003e(*p) ++\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003e2. Pointer to Pointer\u003c/h2\u003e\n\u003cp\u003eIn this situation, a pointer will indirectly point to a variable via another pointer.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eint **ptr\u003cbr\u003e\u003cbr\u003e\nPointer 2 ------------\u003e Pointer 1-------------\u003e Variable\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n    int var, *ptr1, **ptr2;\n    var 5;\n    ptr1  = \u0026var;\n    ptr2 = \u0026ptr1;\n    cout \u003c\u003c \"var=\" \u003c\u003c var \u003c\u003c endl \u003c\u003c \"ptr1=\" \u003c\u003c*ptr1 \u003c\u003c endl \u003c\u003c\"ptr2=\" \u003c\u003c**ptr2;\n    }\n    return 0;\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\nvar = 5\nptr1 = 5\n**ptr = 25\n\u003c/pre\u003e\u003cbr\u003e\n\n\n\u003ch2 align=\"center\"\u003e3. Array of Pointer\u003c/h2\u003e\n\u003cp\u003eAn array of pointer is an array whose every element is a pointer.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003eint * arr[n] (where n is size of array)\u003cbr\u003e\u003cbr\u003e\nptr[0] ------------\u003e ptr[1]-------------\u003e ptr[2]\u003cbr\u003e\na[0] ----------\u003e a[1] ----------\u003ea[2]\u003c/p\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n    int a [3] = {2, 3, 5};\n    int *ptr[3];\n    for (int i=0; i\u003c3; i++)\n    {\n        ptr[i] = \u0026a [i];\n    }\n    for (int i = 0; i\u003c3; i ++)\n    {\n    cout \u003c\u003c *ptr [i] \u003c\u003c endl;\n    }\n    return 0;\n}\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003e4. Call by Value\u003c/h2\u003e\n\u003cp\u003eIn call by value, we copy the variables values and pass it in function vall as a parameter. If we modify change the value of the actual variable.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nVariable A ------------\u003e Variable A (copy)\u003cbr\u003e\u003cbr\u003e\nVariable B ------------\u003e Variable B (copy)\u003c/p\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n   int X = 10;\n   func (X);\n   cout \u003c\u003c X \u003c\u003c endl;\n   return 0;\n}\n{\n    X = 200;\n    cout \u003c\u003c \"X =\" \u003c\u003c X \u003c\u003c endl;\n    return 0;\n}\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003e5. Call by Reference:\u003c/h2\u003e\n\u003cp\u003eIn call by reference, we take the variables address and pass it in function called as a parameter.\u003cbr\u003e\nIf we modify these parameters, then it will change the value of the actual variable as well.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eSyntax: \u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nVariable A ------------\u003e (address) Variable A\u003cbr\u003e\u003cbr\u003e\nVariable B ------------\u003e (address) Variable B \u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n#include \u003cbits/stdc++.h\u003e;\nusing namespace std;\nmain()\n{\n   int X = 10;\n   func (\u0026X);\n   cout \u003c\u003c \"X=\" \u003c\u003c endl;\n   return 0;\n}\n    void func (int *X)\n{\n    X = 200;\n    cout \u003c\u003c \"in func function X = \" \u003c\u003c X \u003c\u003c endl;\n    return 0;\n}\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eAdvantages\u003c/h1\u003e\n\n\u003cul\u003e\n    \u003cli\u003ePointers are helpful to access a memory location.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers are an effective way to access the array structure elements.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers are used for the allocation of dynamic memory and the distribution.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers are used to build complecated data structures like a linked list graph, tree etc.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\n\u003ch1 align=\"center\"\u003eDisadvantages\u003c/h1\u003e\n\n\u003cul\u003e\n    \u003cli\u003ePoointers are a bit difficult to understand.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers acan cause several errors, such as segmentation errors or unrequired memory access.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003eIf a pointer has an incorrect value, it may corrupt the memeory.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers may corrupt the memory.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003eThe pointers are relatively slower than the variables.\n    \u003c/li \u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\n\u003ch1 align=\"center\"\u003eKey Points\u003c/h1\u003e\n\n\u003cul\u003e\n    \u003cli\u003eA pointer is simply a storage location for data in memory.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointers can be used to traverse the array more efficiently.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003eWe can use function pointers to invoke a function dynamically.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003ePointer arithemetic is the process of performing arithmetic opearations on pointer.\u003c/li\u003e\u003cbr\u003e\n    \u003cli\u003eIn an array of pointers, it can point to functions, making it simple to call different functions.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\u003cbr\u003e\n\n\n\u003ch1 align=\"center\"\u003eArrays\u003c/h1\u003e\n\n\u003ch2 align=\"center\"\u003eNeed of Arrays\u003c/h2\u003e\n\u003cp\u003eLer us imagine that we were supposed keep track of the students marks and also honor them with degrees. If we done this in traditional ways of declaring individual variables for each student, then it would be time-consuming.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eExample:-\u003c/b\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eScore:\u003c/b\u003e 1 2 3 4 5\u003cbr\u003e\n\u003cb\u003eStudent:\u003c/b\u003e 1 2 3 4 5\u003c/p\u003e\n\n\u003cp\u003eSo, what if there is an option where one variable could do the job of 'n' variables.\u003cbr\u003e\nSo with a similar approach, the array data structure were designed\n\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2\u003eArrays\u003c/h2\u003e\n\u003cp\u003eAn array is a linear data structure that collects elements of same data type and stores them in a contiguous and adjavent memory locations.\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eMemory Representation\u003c/h3\u003e\n\u003cp\u003eLet's create an array of five elements.\u003c/p\u003e\n\u003cp align =\"center\"\u003e[ A ]\u0026nbsp;\u0026nbsp;\u0026nbsp; [ R ] \u0026nbsp;\u0026nbsp;\u0026nbsp; [ R ]\u0026nbsp;\u0026nbsp;\u0026nbsp; [ A ]\u0026nbsp;\u0026nbsp;\u0026nbsp; [ Y ]\u003c/p\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e The element in an array are stored using memory block address and \u003ci\u003eArray Index.\u003c/i\u003e\n\n\u003cpre\u003e\n┌─────────┐  ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐\n│ Address │→ │ 11 │ │ 12 │ │ 13 │ │ 14 │ │ 15 │\n└─────────┘  └────┘ └────┘ └────┘ └────┘ └────┘\n┌────────┐   ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐\n│ Array  │→  │ A  │ │ R  │ │ R  │ │ A  │ │ Y  │\n└────────┘   └────┘ └────┘ └────┘ └────┘ └────┘\n┌─────────┐  ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐\n│ Index   │→ │ 01 │ │ 02 │ │ 03 │ │ 04 │ │ 05 │\n└─────────┘  └────┘ └────┘ └────┘ └────┘ └────┘\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eTypes\u003c/h2\u003e\n\u003cp\u003e\u003cb\u003ei) One Dinemsional Array\u003cbr\u003e\nii) Multidimensional Array\u003cbr\u003e\na) 2D \u0026nbsp;\u0026nbsp;\u0026nbsp; b) 3D\u003cbr\u003e\u003c/b\u003e\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2\u003e1. One Dimensional Array\u003c/h2\u003e\n\u003cp\u003eIt requires only one subscript specify element in array.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003eint marks [10] =\u003c/b\u003e {0, 1, 2, 3, 4, 5, 6, 7, 8,9}\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eElements-\u003c/b\u003e [ ] [ ] [ ]  [ ]  [ ]  [ ]  [ ] [ ] [ ] [ ]\u003cbr\u003e\n\u003cb\u003eIndex-\u003c/b\u003e 0  1  2  3 4 5 6 7 8 9\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2\u003e2. Multdimensional Array\u003c/h2\u003e\n\u003cp\u003eIt requires more than one subscript to specify the element in an arrays.\u003c/p\u003e\n\n\u003ch3\u003ea) 2D Arrays\u003c/h3\u003e\n\u003cp\u003eIt is organised in the forn of matrix which can be represented as a collection of Rows and Columns.\u003c/p\u003e\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003eint num [3] [3] =\u003c/b\u003e{1,2,3}, {4,5,6}, {7,8,9}\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n              0   1   2\n            ┌───┬───┬───┐\n        0   │ 1 │ 2 │ 3 │\n            ├───┼───┼───┤\n        1   │ 4 │ 5 │ 6 │\n            ├───┼───┼───┤\n        2   │ 7 │ 8 │ 9 │\n            └───┴───┴───┘\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch3\u003eb) 3D Arrays\u003c/h3\u003e\n\u003cp\u003eIt is a collection of 2D arrays which consists of three subscripts- \u003cb\u003eBlock size, Row size\u003c/b\u003e and \u003cb\u003eColumn size\u003c/b\u003e.\u003cbr\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003eint num [2] [3] [2] =\u003c/b\u003e\u003c/p\u003e\n\n\u003cpre\u003e\n\n\n   num[row] [col][0]                  num[row] [col] [1]\n\n      0   1   2                           0   1   2\n    ┌───┬───┬───┐                       ┌───┬───┬───┐\n 0  │   │   │   │                    0  │   │   │   │\n    ├───┼───┼───┤                       ├───┼───┼───┤\n 1  │   │   │   │                    1  │   │   │   │\n    └───┴───┴───┘                       └───┴───┴───┘   \n\n\u003c/pre\u003e\u003cbr\u003e\n\n\n\u003ch2 align=\"center\"\u003eDeclearation of Arrays\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003eSyntax: \u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cb\u003edatatype array_name[array_size];\u003c/b\u003e\u003cbr\u003e\n\n\u003cb\u003eFor Example:-\u003c/b\u003e \u003ci\u003e An array of integer can be declared as follows.\u003c/i\u003e\n\u003c/p\u003e\n\n\n\n\u003cpre\u003e\n\n\u003cp\u003e\u003cb\u003eint(example) [6];\u003c/b\u003e\u003c/p\u003e\n\n┌───┐   ┌───┐   ┌───┐   ┌───┐   ┌───┐   ┌───┐\n│   │   │   │   │   │   │   │   │   │   │   │\n└───┘   └───┘   └───┘   └───┘   └───┘   └───┘\n  0       1       2       3       4       5\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003cp\u003eCompiler will allocate a contiguous memory block okf size = 6 * sizeof (int)\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eInitialization of Arrays\u003c/h2\u003e\n\n\u003ctable align =\"center\"\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eMethod 1\u003c/b\u003e\u003c/td\u003e\n\u003ctd\u003eint a [5] = {1, 2,3,4,5};\u003c/td\u003e\n\u003ctd\u003ea = [1][2][3][4][5]\u003cbr\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;0 \u0026nbsp;1 \u0026nbsp;2 \u0026nbsp;3 \u0026nbsp;4\u003c/td\u003e\n\u003c/tr\u003e\n\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eMethod 2\u003c/b\u003e\u003c/td\u003e\n\u003ctd\u003eint a [ ] = {1,2,3,4,5};\u003c/td\u003e\n\u003ctd\u003ea = [1][2][3][4][5]\u003cbr\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;0 \u0026nbsp;1 \u0026nbsp;2 \u0026nbsp;3 \u0026nbsp;4\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eMethod 3\u003c/b\u003e\u003c/td\u003e\n\u003ctd\u003eint a [5];\u003cbr\u003e\na [0] = 1;\u003cbr\u003e\na [1] = 2;\u003cbr\u003e\na [2] = 3;\u003cbr\u003e\na [3] = 4;\u003cbr\u003e\na [4] = 5;\u003cbr\u003e\n\u003c/td\u003e\n\u003ctd\u003ea = [1][2][3][4][5]\u003cbr\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;0 \u0026nbsp;1 \u0026nbsp;2 \u0026nbsp;3 \u0026nbsp;4\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eMethod 4\u003c/b\u003e\u003c/td\u003e\n\u003ctd\u003eint a [5]\u003cbr\u003e\nfor( i = 0; i \u003c 5; i ++\u003e)\u003cbr\u003e\n    {scanf (\"%d\", a[i]);\u003cbr\u003e\n}\n\u003c/td\u003e\n\u003ctd\u003ea = [1][2][3][4][5]\u003cbr\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;0 \u0026nbsp;1 \u0026nbsp;2 \u0026nbsp;3 \u0026nbsp;4\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eAccessing Elements of Array\u003c/h2\u003e\n\n\u003cp\u003e\u003cb\u003eTo access an array elements:\u003c/b\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;name_of_array[sizeofarray];\u003c/p\u003e\n\n\n\u003cpre\u003e\n\n\u003cb\u003eint xyz[5];\u003c/b\u003e\n\n┌───┐  ┌───┐  ┌───┐  ┌───┐  ┌───┐   \n└───┘  └───┘  └───┘  └───┘  └───┘   \n  0      1      2      3      4\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003cul\u003e\n\u003cli\u003eAccessing the first element in an array can be done using the first index.\u003cbr\u003e\n\u003cb\u003ee.g. xyz [0]\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003eAccessing the second element in an array can be done using the second index.\u003cbr\u003e\n\u003cb\u003ee.g. xyz [1]\u003c/b\u003e and so on.\u003c/li\u003e\n\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eOperation on Array Elements\u003c/h1\u003e\n\n\u003ch2\u003eTraversal\u003c/h2\u003e\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eTraversal in an array is a process of visiting each elements once.\u003c/li\u003e\n\u003cli\u003eIt can be done by various means.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\n\u003cb\u003ei)\u003c/b\u003e Counting the array elements.\u003cbr\u003e\n\u003cb\u003eii)\u003c/b\u003e Printing the values stored in an arrays.\u003cbr\u003e\n\u003cb\u003eiii)\u003c/b\u003e Sum of elements present in an arrays and many more.\u003cbr\u003e\n\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n\n  ↓       ↓       ↓       ↓       ↓\n┌───┐   ┌───┐   ┌───┐   ┌───┐   ┌───┐  \n│10 │   │20 │   │30 │   │40 │   │50 │  \n└───┘   └───┘   └───┘   └───┘   └───┘  \n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003eInsertion\u003c/h2\u003e\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eInsertion in an array is the process of including one or more elements in an array\u003c/li\u003e\n\u003cli\u003eInsertion of elements can be done:\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\u003cp\u003e\n\u003cb\u003ei)\u003c/b\u003e At the begining,\u003cbr\u003e\n\u003cb\u003eii)\u003c/b\u003e At the end, and\u003cbr\u003e\n\u003cb\u003eiii)\u003c/b\u003e At any given index of an Array\n\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n\n┌───┐   ┌───┐   ┌───┐   ┌───┐   ┌───┐  ┌───┐                  \n│10 │   │20 │   │30 │   │50 │   │60 │  |   |\n└───┘   └───┘   └───┘   └───┘   └───┘  └───┘     \n                          |____↗  |____↗        \n\n                ┌───┐\n                |40 |\n                └───┘\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003eDeletion\u003c/h2\u003e\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eDeletion of an element is the process of removing the desired elements and re-organize it. \u003c/li\u003e\n\u003cli\u003eDeletion of elements can be done by different way:\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\u003cp\u003e\n\u003cb\u003ei)\u003c/b\u003e From the begining,\u003cbr\u003e\n\u003cb\u003eii)\u003c/b\u003e From the end, and\u003cbr\u003e\n\u003cb\u003eiii)\u003c/b\u003e From any given index\n\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2\u003eSearching\u003c/h2\u003e\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eIt is the process of finding a given value in a list of values.\u003c/li\u003e\n\u003cli\u003eIt decides whether the search key is  present is an array or not.\u003c/li\u003e\n\u003cli\u003eIt is an algorithmic process of finding a particular item in collection of data.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n\n   0     1     2     3     4\n┌─────┬─────┬─────┬─────┬─────┐\n│ 10  │ 20  │ 30  │ 40  │ 50  │\n└─────┴─────┴─────┴─────┴─────┘\n   ↑ \n┌─────┬─────┬─────┬─────┬─────┐\n│ 10  │ 20  │ 30  │ 40  │ 50  │\n└─────┴─────┴─────┴─────┴─────┘\n         ↑ \n┌─────┬─────┬─────┬─────┬─────┐\n│ 10  │ 20  │ 30  │ 40  │ 50  │\n└─────┴─────┴─────┴─────┴─────┘\n               ↑ \n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2\u003eSorting\u003c/h2\u003e\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003eIt is the process in which element sorted in a user defined order.\u003cbr\u003e\n\u003cb\u003eFor Ex-\u003c/b\u003e \u003ci\u003e Numerical, Alphabetical etc.\u003c/i\u003e\u003c/li\u003e\n\u003cli\u003eThis process is done in ascending order.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n                    ┌────┐                  ┌────┐\n                    │ 30 │                  │ 10 │\n                    ├────┤                  ├────┤\n                    │ 10 │                  │ 20 │\n                    ├────┤                  ├────┤\n Before             │ 50 │      ------\u003e     │ 30 │    After\n Sorting            ├────┤                  ├────┤   Sorting\n                    │ 20 │                  │ 40 │\n                    ├────┤                  ├────┤\n                    │ 40 │                  │ 50 │\n                    └────┘                  └────┘\n\u003c/pre\u003e\n\n\n\n\u003ch1 align=\"center\"\u003eAdvantages\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eArrays stores multiple elemlents of same type with the same name.\u003c/li\u003e\n\u003cli\u003e Elements in an array can access randomly using an index number.\u003c/li\u003e\n\u003cli\u003eArray memory is predefined, so there is no extra memory loss.\u003c/li\u003e\n\u003cli\u003eThey avoid memory loss.\u003c/li\u003e\n\u003cli\u003e2D arrays can represent the tabular data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cbr\u003e\n\n\u003ch1 align=\"center\"\u003eDisadvantages\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eThe no. of elements in an array should be pre-defined.\u003c/li\u003e\n\u003cli\u003eIt is static in nature , it's size cannot be varied after declaration.\u003c/li\u003e\n\u003cli\u003eAllocating excess memory than required may lead to memory wastage.\u003c/li\u003e\n\u003cli\u003eInsertion and deletion opearation in an array is quite difficult as array stores elements in contuous form.\u003c/li\u003e\n\n\u003c/ul\u003e\u003cbr\u003e\n\n\u003ch1\u003eTwo Dimensional Arrays\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eThese array are called arrays of arrays.\u003c/li\u003e\n\u003cli\u003eIt is created to execute relational database which is like data structure.\u003c/li\u003e\n\u003cli\u003eThese arrays organised as matrices which are the colleection of rows and columns.\u003c/li\u003e\n\u003cli\u003eIt consists rows and columns.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3 align=\"center\"\u003eNeed of 2-D Arrays\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe main advantage of this is grouping of elements.\u003c/li\u003e\u003c/ul\u003e\n\u003cp\u003e\u003cb\u003eFor Example: \u003c/b\u003e Consider we have a class consisting four students-\nEach student consists of three subjejctjs namely \u003ci\u003eEnglish, Science, and Mathematics\u003c/i\u003e.And we want to represent marks of each student.\u003c/p\u003e\u003cbr\u003e\n\n\u003cpre\u003e\n                    Students\n                  1   2   3   4\n                ┌───┬───┬───┬───┐\n    English     │70 │90 │80 │75 │\n                ├───┼───┼───┼───┤\n    Science     │65 │75 │60 │55 │\n                ├───┼───┼───┼───┤\n    Maths       │50 │65 │75 │80 │\n                └───┴───┴───┴───┘\n\n\u003ci\u003eSo, the above table represents whole class marks.\u003c/i\u003e\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch3\u003eSyntax:\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003e data_type name_of_array[R][C];\u003c/b\u003e\u003cbr\u003e \n\u003ci\u003eR → No. of Rows, C → No. of Columns\u003c/i\u003e\n\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e \u003ci\u003eColumns should not be empty.\u003c/i\u003e\u003cbr\u003e\n\n\u003cb\u003ee.g\u003c/b\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nfloat arr [ 3 ] [ 4 ];\u003cbr\u003e\nchar names [ 7 ] [ 15 ];\n\u003c/p\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eVisualizing\u003c/h2\u003e\n\u003cp\u003eI tis a collection of rows and columns.\u003c/p\u003e\n\n\u003cpre\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eint array[6][4];\u003c/b\u003e\u003c/p\u003e\n\n      ↓ Columns\n        ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ \n        │          │          │          │          │          │          │\n        ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤\n        │          │          │          │          │          │          │\n        ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤\n        │          │          │          │          │          │          │\n        ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤\n        │          │          │          │          │          │          │\n        └──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘\n      --→ Rows         \n\n\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e \u003ci\u003eThis 2-D Array consist 6 no. of rows and 4 no. of columns.\u003c/i\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eTotal 6 * 4 = 24\u003c/b\u003e\u003c/p\u003e\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003e Initialization\u003c/h2\u003e\n\n\u003ch3\u003e1. First Method\u003c/h3\u003e\n\n\u003cpre\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eint first[2][2]= {9,6,1,144,70,50,10,12,78};\u003c/b\u003e\u003c/p\u003e\n\n\n                                  Column Index ↘     \n           0       1       2                      0       1       2\n      ┌────────┬────────┬────────┐           ┌────────┬────────┬────────┐\n  0   │   9    │   6    │   1    │       0   │ (0,0)  │ (0,1)  │ (0,2)  │\n      ├────────┼────────┼────────┤           ├────────┼────────┼────────┤\n  1   │  114   │   70   │   50   │       1   │ (1,0)  │ (1,1)  │ (1,2)  │\n      ├────────┼────────┼────────┤           ├────────┼────────┼────────┤\n  2   │   10   │   12   │   78   │       2   │ (2,0)  │ (2,1)  │ (2,2)  │\n      └────────┴────────┴────────┘           └────────┴────────┴────────┘\n                                           ↖ Row Index\n\n\u003cb\u003eNote:\u003c/b\u003e\u003ci\u003eIndex start from Zero\u003c/i\u003e\n\u003c/pre\u003e\n\n\u003ch3\u003e2. Second Method\u003c/h3\u003e\n\n\u003cpre\u003e\n\n\u003cp\u003e\u003cb\u003eint second[2][2]= {9,6,1}, {144,70,50}, {10,12,78};\u003c/b\u003e\u003c/p\u003e\n\n                                  Column Index ↘     \n           1       2       3                                 1       2       3\n      ┌────────┬────────┬────────┐                      ┌────────┬────────┬────────┐\n  1   │   9    │   6    │   1    │                  1   │ [0][0] │ [0][1] │ [0][2] │ 1st Row\n      ├────────┼────────┼────────┤                      ├────────┼────────┼────────┤\n  2   │  114   │   70   │   50   │                  2   │ [1][0] │ [1][1] │ [1][2] │ 2nd Row\n      ├────────┼────────┼────────┤                      ├────────┼────────┼────────┤\n  3   │   10   │   12   │   78   │                  3   │ [2][0] │ [2][1] │ [2][2] │ 3rd Row\n      └────────┴────────┴────────┘                      └────────┴────────┴────────┘\n                                                      ↖ Row Index\n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eAccessing\u003c/h2\u003e\n\n\u003cpre\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003eint first [3][3]\u003c/b\u003e\u003c/p\u003e\n           0        1        2                                \n      ┌────────┬────────┬────────┐                  \n  0   │   9    │   6    │   1    │       \n      ├────────┼────────┼────────┤                  \n  1   │  114   │   70   │   50   │       \n      ├────────┼────────┼────────┤                  \n  2   │   10   │   12   │   78   │       \n      └────────┴────────┴────────┘                  \n\n\u003c/pre\u003e\u003cbr\u003e\n\n\u003cp\u003e\u003cb\u003e--→ first [ 0 ] [ 0 ]\u003c/b\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003e\nfirst [ 0 ] [ 1 ] = 6\u003cbr\u003e \nfirst [ 0 ] [ 2 ] = 1\u003cbr\u003e\nfirst [ 1 ] [ 0 ] = 144\u003cbr\u003e\nfirst [ 1 ] [ 1 ] = 70\u003cbr\u003e\nfirst [ 1 ] [ 2 ] = 50\u003cbr\u003e \nfirst [ 2 ] [ 0 ] = 10\u003cbr\u003e\nfirst [ 2 ] [ 1 ] = 12\u003cbr\u003e\nfirst [ 2] [ 2 ] = 78\u003cbr\u003e\n\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cpre\u003e\n\u003cb\u003ePrint\u003c/b\u003e\n\n#include\u003cstdio.h\u003e\nint main()\n{\n    int first [3][3] = {9,6,1,144,70,50,10,12,78};\n    int i,j;\n    for (i=0; i\u003c3; i++);\n    {\n        for (j= 0; j\u003c3; j++);\n        {\n            printf (%d, first [i][j];)\n        }\n    }\n}\n\n\u003cb\u003eResult:\u003c/b\u003e\n\n9 6 1 144 70 10 12 78\n\u003c/pre\u003e\u003cbr\u003e\n\n\n\n\u003ch1\u003eThree Dimensional Arrays\u003c/h1\u003e\n\n\u003cul\u003e\n\u003cli\u003eThese arrays are called \u003cb\u003earrays of arrays of arrays\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eIt is an extension of 2-D arrays and is used to represent \u003cb\u003e3D data structures\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eThese arrays are organized as \u003cb\u003elayers, rows, and columns\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eIt consists of \u003cb\u003edepth (layer), rows, and columns\u003c/b\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3 align=\"center\"\u003eNeed of 3-D Arrays\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe main advantage is storing complex data like \u003cb\u003e3D matrices, images, or multiple tables\u003c/b\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cp\u003e\u003cb\u003eFor Example:\u003c/b\u003e Consider a school where we store marks of students for different classes.\u003cbr\u003e\nEach class has students and each student has marks in subjects like \u003ci\u003eEnglish, Science, Maths\u003c/i\u003e.\u003c/p\u003e\n\n\u003cpre\u003e\n              Layer 0 (Class 1)\n\n        ┌───────────────┐\n        │ 70  90  80    │\n        │ 65  75  60    │\n        │ 50  65  75    │\n        └───────────────┘\n\n              Layer 1 (Class 2)\n\n        ┌───────────────┐\n        │ 75  85  95    │\n        │ 60  70  80    │\n        │ 55  65  75    │\n        └───────────────┘\n\n\u003ci\u003eEach box is a 2-D array, and multiple such boxes form a 3-D array.\u003c/i\u003e\n\u003c/pre\u003e\n\n\u003ch3\u003eSyntax:\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003edata_type name_of_array[D][R][C];\u003c/b\u003e\u003cbr\u003e\n\u003ci\u003eD → Depth (Layers), R → Rows, C → Columns\u003c/i\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e \u003ci\u003eColumns must always be specified.\u003c/i\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003ee.g\u003c/b\u003e\u003cbr\u003e\nint arr[2][3][3];\u003cbr\u003e\nfloat data[4][2][5];\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eVisualizing\u003c/h2\u003e\n\n\u003cp\u003eIt is a collection of \u003cb\u003emultiple 2-D arrays (layers)\u003c/b\u003e.\u003c/p\u003e\n\n\u003cpre\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eint array[2][3][3];\u003c/b\u003e\u003c/p\u003e\n\nLayer 0                    Layer 1\n┌───────────┐            ┌───────────┐\n│           │            │           │\n│   3x3     │            │   3x3     │\n│  Matrix   │            │  Matrix   │\n│           │            │           │\n└───────────┘            └───────────┘\n\nTotal Elements = 2 × 3 × 3 = 18\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eInitialization\u003c/h2\u003e\n\n\u003ch3\u003e1. First Method\u003c/h3\u003e\n\n\u003cpre\u003e\n\u003cp align=\"center\"\u003e\n\u003cb\u003e\nint first[2][3][3] = {\n  9,6,1, 144,70,50, 10,12,78,\n  5,4,3, 20,30,40, 11,22,33\n};\n\u003c/b\u003e\n\u003c/p\u003e\n\n\u003ci\u003eValues are filled layer by layer.\u003c/i\u003e\n\u003c/pre\u003e\n\n\u003ch3\u003e2. Second Method\u003c/h3\u003e\n\n\u003cpre\u003e\n\u003cp\u003e\n\u003cb\u003e\nint second[2][3][3] = {\n    {\n        {9,6,1},\n        {144,70,50},\n        {10,12,78}\n    },\n    {\n        {5,4,3},\n        {20,30,40},\n        {11,22,33}\n    }\n};\n\u003c/b\u003e\n\u003c/p\u003e\n\n\u003ci\u003eThis method is more readable and preferred.\u003c/i\u003e\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eAccessing Elements\u003c/h2\u003e\n\n\u003cpre\u003e\n\u003cp align=\"center\"\u003e\u003cb\u003eint first[2][3][3]\u003c/b\u003e\u003c/p\u003e\n\nAccess format:\nfirst[layer][row][column]\n\nExample:\nfirst[0][0][0] = 9\nfirst[0][1][2] = 50\nfirst[1][2][1] = 22\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eTraversal (Print)\u003c/h2\u003e\n\n\u003cpre\u003e\n\u003cb\u003e#include \u0026lt;stdio.h\u0026gt;\n\nint main()\n{\n    int first[2][3][3] = {\n        { {9,6,1}, {144,70,50}, {10,12,78} },\n        { {5,4,3}, {20,30,40}, {11,22,33} }\n    };\n\n    int i,j,k;\n\n    for(i=0; i\u0026lt;2; i++)\n    {\n        printf(\"Layer %d:\\n\", i);\n\n        for(j=0; j\u0026lt;3; j++)\n        {\n            for(k=0; k\u0026lt;3; k++)\n            {\n                printf(\"%d \", first[i][j][k]);\n            }\n            printf(\"\\n\");\n        }\n        printf(\"\\n\");\n    }\n\n    return 0;\n}\n\u003c/b\u003e\n\n\u003cb\u003eOutput:\u003c/b\u003e\n\nLayer 0:\n9 6 1\n144 70 50\n10 12 78\n\nLayer 1:\n5 4 3\n20 30 40\n11 22 33\n\u003c/pre\u003e\n\n\u003cbr\u003e\n\n\u003ch2 align=\"center\"\u003eKey Points\u003c/h2\u003e\n\n\u003cul\u003e\n\u003cli\u003e3-D arrays store data in \u003cb\u003elayers (depth)\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eIndexing starts from \u003cb\u003e0\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eTotal elements = \u003cb\u003eD × R × C\u003c/b\u003e.\u003c/li\u003e\n\u003cli\u003eUsed in \u003cb\u003egraphics, games, simulations\u003c/b\u003e.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\n\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%2Froseewood%2Fdsa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froseewood%2Fdsa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froseewood%2Fdsa/lists"}