Pseudo Code DSA
Pseudo Code DSA
LinearSearch(array, target)
1. for i = 0 to length(array) - 1
2. if array[i] == target
3. return i
4. return -1
BinarySearch(array, target)
1. left ← 0
2. right ← length(array) - 1
5. if array[mid] == target
6. return mid
8. left ← mid + 1
9. else
11. return -1
BubbleSort(array)
1. n ← length(array)
2. for i ← 0 to n - 1
3. for j ← 0 to n - i - 2
InsertionSort(array)
1. n ← length(array)
2. for i ← 1 to n - 1
3. key ← array[i]
4. j←i-1
6. array[j + 1] ← array[j]
7. j←j-1
8. array[j + 1] ← key
9. return array
SelectionSort(array)
1. n ← length(array)
2. for i ← 0 to n - 1
3. minIndex ← i
4. for j ← i + 1 to n - 1
6. minIndex ← j
7. swap(array[i], array[minIndex])
8. return array
1. Define Node:
- data
- next ← NULL
2. Initialize:
- head ← NULL
Operations:
3. CreateNode(data):
- return newNode
4. InsertAtBeginning(data):
- newNode ← CreateNode(data)
- newNode.next ← head
- head ← newNode
5. InsertAtEnd(data):
- newNode ← CreateNode(data)
- if head is NULL:
- head ← newNode
- else:
- temp ← head
- temp ← temp.next
- temp.next ← newNode
6. InsertInMiddle(data, pos):
- newNode ← CreateNode(data)
- if pos = 1:
- InsertAtBeginning(data)
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = NULL:
- break
- temp ← temp.next
- newNode.next ← temp.next
- temp.next ← newNode
7. DeleteAtBeginning():
- head ← head.next
8. DeleteAtEnd():
- if head.next is NULL:
- head ← NULL
- else:
- temp ← head
- temp ← temp.next
- temp.next ← NULL
9. DeleteAtMiddle(pos):
- if pos = 1:
- DeleteAtBeginning()
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = NULL:
- break
- temp ← temp.next
- if temp.next ≠ NULL:
- temp.next ← temp.next.next
10. Display():
- temp ← head
- print temp.data
- temp ← temp.next
2. Initialize:
- head ← NULL
Operations:
3. CreateNode(data):
- newNode ← create Node(data)
- return newNode
4. InsertAtBeginning(data):
- newNode ← CreateNode(data)
- if head is NULL:
- head ← newNode
- else:
- newNode.next ← head
- head.prev ← newNode
- head ← newNode
5. InsertAtEnd(data):
- newNode ← CreateNode(data)
- if head is NULL:
- head ← newNode
- else:
- temp ← head
- while temp.next ≠ NULL:
- temp ← temp.next
- temp.next ← newNode
- newNode.prev ← temp
6. InsertInMiddle(data, pos):
- newNode ← CreateNode(data)
- if pos = 1:
- InsertAtBeginning(data)
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = NULL:
- break
- temp ← temp.next
- if temp.next ≠ NULL:
- newNode.next ← temp.next
- temp.next.prev ← newNode
- temp.next ← newNode
- newNode.prev ← temp
7. DeleteAtBeginning():
- if head ≠ NULL:
- if head.next = NULL:
- head ← NULL
- else:
- head ← head.next
- head.prev ← NULL
8. DeleteAtEnd():
- if head ≠ NULL:
- if head.next = NULL:
- head ← NULL
- else:
- temp ← head
- while temp.next ≠ NULL:
- temp ← temp.next
- temp.prev.next ← NULL
9. DeleteAtMiddle(pos):
- if head ≠ NULL:
- if pos = 1:
- DeleteAtBeginning()
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = NULL:
- break
- temp ← temp.next
- if temp.next ≠ NULL:
- temp.next ← temp.next.next
- if temp.next ≠ NULL:
- temp.next.prev ← temp
10. DisplayForward():
- temp ← head
- while temp ≠ NULL:
- print temp.data
- temp ← temp.next
11. DisplayBackward():
- temp ← head
- while temp.next ≠ NULL:
- temp ← temp.next
- while temp ≠ NULL:
- print temp.data
- temp ← temp.prev
1. Define Node:
- data
- next ← NULL
2. Initialize:
- head ← NULL
Operations:
3. CreateNode(data):
- return newNode
4. InsertAtBeginning(data):
- newNode ← CreateNode(data)
- if head is NULL:
- head ← newNode
- newNode.next ← head
- else:
- temp ← head
- temp ← temp.next
- newNode.next ← head
- temp.next ← newNode
- head ← newNode
5. InsertAtEnd(data):
- newNode ← CreateNode(data)
- if head is NULL:
- head ← newNode
- newNode.next ← head
- else:
- temp ← head
- temp ← temp.next
- temp.next ← newNode
- newNode.next ← head
6. InsertInMiddle(data, pos):
- newNode ← CreateNode(data)
- if pos = 1:
- InsertAtBeginning(data)
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = head:
- break
- temp ← temp.next
- newNode.next ← temp.next
- temp.next ← newNode
7. DeleteAtBeginning():
- if head ≠ NULL:
- if head.next = head:
- head ← NULL
- else:
- temp ← head
- temp ← temp.next
- temp.next ← head.next
- head ← head.next
8. DeleteAtEnd():
- if head ≠ NULL:
- if head.next = head:
- head ← NULL
- else:
- temp ← head
- temp ← temp.next
- temp.next ← head
9. DeleteAtMiddle(pos):
- if head ≠ NULL:
- if pos = 1:
- DeleteAtBeginning()
- else:
- temp ← head
- for i ← 1 to pos - 2:
- if temp.next = head:
- break
- temp ← temp.next
- if temp.next ≠ head:
- temp.next ← temp.next.next
10. Display():
- if head ≠ NULL:
- temp ← head
- do:
- print temp.data
- temp ← temp.next
2. Initialize:
- head1 ← NULL // for first polynomial
- head2 ← NULL // for second polynomial
- result ← NULL // for resulting polynomial
Operations:
3. CreateNode(coefficient, exponent):
- newNode ← create Node(coefficient, exponent)
- return newNode
5. PolynomialAddition(head1, head2):
- result ← NULL
- while head1 ≠ NULL and head2 ≠ NULL:
- if head1.exponent > head2.exponent:
- result ← InsertAtEnd(result, head1.coefficient, head1.exponent)
- head1 ← head1.next
- else if head1.exponent < head2.exponent:
- result ← InsertAtEnd(result, head2.coefficient, head2.exponent)
- head2 ← head2.next
- else:
- sum ← head1.coefficient + head2.coefficient
- if sum ≠ 0:
- result ← InsertAtEnd(result, sum, head1.exponent)
- head1 ← head1.next
- head2 ← head2.next
- return result
6. DisplayPolynomial(head):
- temp ← head
- while temp ≠ NULL:
- if temp.coefficient > 0 and temp ≠ head:
- print "+" temp.coefficient "x^" temp.exponent
- else:
- print temp.coefficient "x^" temp.exponent
- temp ← temp.next
2. Initialize:
- top ← NULL
- maxSize ← predefined limit (if using a fixed-size stack)
- currentSize ← 0
Operations:
3. CreateNode(data):
- newNode ← create Node(data)
- return newNode
4. Push(data):
- if isFull():
- return "Stack Overflow"
- newNode ← CreateNode(data)
- newNode.next ← top
- top ← newNode
- currentSize ← currentSize + 1
5. Pop():
- if isEmpty():
- return "Stack Underflow"
- temp ← top
- top ← top.next
- currentSize ← currentSize - 1
- return temp.data
6. Peek():
- if isEmpty():
- return "Stack is empty"
- return top.data
7. IsEmpty():
- if top = NULL:
- return true
- else:
- return false
8. IsFull():
- if currentSize == maxSize:
- return true
- else:
- return false
9. Display():
- if isEmpty():
- return "Stack is empty"
- temp ← top
- while temp ≠ NULL:
- print temp.data
- temp ← temp.next
- data
- next ← NULL
2. Initialize:
- top ← NULL
- currentSize ← 0
Operations:
3. CreateNode(data):
- return newNode
4. Push(data):
- if isFull():
- newNode ← CreateNode(data)
- newNode.next ← top
- top ← newNode
- currentSize ← currentSize + 1
5. Pop():
- if isEmpty():
- temp ← top
- top ← top.next
- currentSize ← currentSize - 1
- return temp.data
6. Peek():
- if isEmpty():
- return top.data
7. IsEmpty():
- if top = NULL:
- return true
- else:
- return false
8. IsFull():
- if currentSize == maxSize:
- return true
- else:
- return false
9. Display():
- if isEmpty():
- temp ← top
- while temp ≠ NULL:
- print temp.data
- temp ← temp.next
1. Precedence(operator):
return 0
2. InfixToPostfix(expression):
stack ← empty
result ← empty
return result
InfixToPrefix(expression):
reverse(expression)
postfix ← InfixToPostfix(expression)
reverse(postfix)
return postfix
Main():
postfix ← InfixToPostfix(infix)
prefix ← InfixToPrefix(infix)
1. Precedence(op):
if op = '^': return 3
return 0
2. ApplyOperation(a, b, op):
if op = '+': return a + b
if op = '-': return a - b
if op = '*': return a * b
if op = '/': return a / b
if op = '^': return a ^ b
3. EvaluateInfix(expression):
if char is number:
push(values, char)
push(operators, char)
b ← pop(values)
a ← pop(values)
op ← pop(operators)
b ← pop(values)
a ← pop(values)
op ← pop(operators)
push(operators, char)
b ← pop(values)
a ← pop(values)
op ← pop(operators)
Queue:
Initialize:
front ← 0
rear ← -1
size ← 0
Operations:
1. Enqueue(data):
if isFull():
queue[rear] ← data
size ← size + 1
2. Dequeue():
if isEmpty():
data ← queue[front]
size ← size - 1
return data
3. Peek():
if isEmpty():
return queue[front]
4. IsEmpty():
if size == 0:
return true
return false
5. IsFull():
if size == maxSize:
return true
return false
6. Display():
if isEmpty():
temp ← front
print queue[temp]
InputRestrictedQueue:
Initialize:
front ← 0
rear ← -1
size ← 0
Operations:
1. Enqueue(data):
if isFull():
queue[rear] ← data
size ← size + 1
2. DequeueFromFront():
if isEmpty():
data ← queue[front]
size ← size - 1
return data
3. DequeueFromRear():
if isEmpty():
data ← queue[rear]
size ← size - 1
return data
4. PeekFront():
if isEmpty():
return queue[front]
5. PeekRear():
if isEmpty():
return queue[rear]
6. IsEmpty():
if size == 0:
return true
return false
7. IsFull():
if size == maxSize:
return true
return false
8. Display():
if isEmpty():
temp ← front
print queue[temp]
temp ← (temp + 1) % maxSize
Node:
data
left ← NULL
right ← NULL
1. PreorderTraversal(node):
if node ≠ NULL:
print node.data
PreorderTraversal(node.left)
PreorderTraversal(node.right)
2. InorderTraversal(node):
if node ≠ NULL:
InorderTraversal(node.left)
print node.data
InorderTraversal(node.right)
3. PostorderTraversal(node):
if node ≠ NULL:
PostorderTraversal(node.left)
PostorderTraversal(node.right)
print node.data
pivot ← arr[high]
i ← low - 1
if arr[j] ≤ pivot:
i←i+1
swap(arr[i], arr[j])
return i + 1
n1 ← mid - left + 1
n2 ← right - mid
leftArr[i] ← arr[left + i]
for j ← 0 to n2 - 1:
rightArr[j] ← arr[mid + 1 + j]
i ← 0, j ← 0, k ← left
if leftArr[i] ≤ rightArr[j]:
arr[k] ← leftArr[i]
i←i+1
else:
arr[k] ← rightArr[j]
j←j+1
k←k+1
arr[k] ← leftArr[i]
i←i+1
k←k+1
arr[k] ← rightArr[j]
j←j+1
k←k+1
for i ← 0 to n - 1:
remainingCapacity ← capacity
for i ← 0 to n - 1:
if weight[i] ≤ remainingCapacity:
else:
break
return totalProfit
1. PrimMST(graph, V):
for count ← 0 to V - 1:
parent[v] ← u
key[v] ← graph[u][v]
PrintMST(parent, graph)
2. ExtractMin(key, MSTSet):
minKey ← ∞
minIndex ← -1
for v ← 0 to V - 1:
minKey ← key[v]
minIndex ← v
return minIndex
3. PrintMST(parent, graph):
for i ← 1 to V - 1:
1. KruskalMST(graph, V, E):
if uRoot ≠ vRoot:
result.append((u, v, weight))
PrintMST(result)
2. Find(node, parent):
if parent[node] = -1:
return node
return Find(parent[node], parent)
parent[vRoot] ← uRoot
parent[uRoot] ← vRoot
else:
parent[vRoot] ← uRoot
rank[uRoot] ← rank[uRoot] + 1
4. PrintMST(result):
1. Dijkstra(graph, V, source):
for count ← 0 to V - 1:
PrintShortestPaths(source, dist)
2. ExtractMin(dist, visited):
minDist ← ∞
minIndex ← -1
for v ← 0 to V - 1:
minDist ← dist[v]
minIndex ← v
return minIndex
3. PrintShortestPaths(source, dist):
for i ← 0 to V - 1:
1. MultiStageGraph(graph, n):
Create cost[n] ← ∞ // Cost from source to each vertex
Create path[n] ← -1 // To track the shortest path
cost[1] ← 0 // Start from source (node 1)
for i ← 1 to n - 1:
for each neighbor j of i:
if cost[i] + graph[i][j] < cost[j]:
cost[j] ← cost[i] + graph[i][j]
path[j] ← i
PrintShortestPath(path, n, cost[n])
2. PrintShortestPath(path, n, minCost):
Create stack ← []
node ← n
while node ≠ -1:
stack.push(node)
node ← path[node]
print "Shortest Path: "
while stack is not empty:
print stack.pop()
print "Minimum Cost: " minCost
1. MultiStageGraphBackward(graph, n):
Create cost[n+1] ← ∞ // Minimum cost from each vertex to destination
Create path[n+1] ← -1 // To track the shortest path
cost[n] ← 0 // Cost at the destination node is 0
for i ← n - 1 to 1 step -1:
for each neighbor j of i:
if graph[i][j] ≠ 0 and graph[i][j] + cost[j] < cost[i]:
cost[i] ← graph[i][j] + cost[j]
path[i] ← j
PrintShortestPath(path, 1, cost[1])