મુખ્ય સામગ્રી પર જાઓ
  1. સંસાધનો/
  2. અભ્યાસ સામગ્રી/
  3. ઇન્ફોર્મેશન અને કમ્યુનિકેશન ટેકનોલોજી એન્જિનિયરિંગ/
  4. આઈસીટી સેમેસ્ટર 3/
  5. ડેટા સ્ટ્રક્ચર્સ એન્ડ એલ્ગોરિધમ્સ (1333203)/

Data Structure and Application (1333203) - Summer 2025 Solution (Gujarati)

17 મિનિટ· ·
Study-Material Solutions Data-Structure 1333203 2025 Summer
મિલવ ડબગર
લેખક
મિલવ ડબગર
ઇલેક્ટ્રિકલ અને ઇલેક્ટ્રોનિક મેન્યુફેક્ચરિંગ ઉદ્યોગમાં અનુભવી લેક્ચરર. એમ્બેડેડ સિસ્ટમ્સ, ઈમેજ પ્રોસેસિંગ, ડેટા સાયન્સ, મેટલેબ, પાયથન, STM32માં કુશળ. એલ.ડી. કોલેજ ઓફ એન્જિનિયરિંગ - અમદાવાદથી કમ્યુનિકેશન સિસ્ટમ્સ એન્જિનિયરિંગમાં માસ્ટર્સ ડિગ્રી ધરાવતા મજબૂત શિક્ષણ વ્યાવસાયિક.
અનુક્રમણિકા

પ્રશ્ન 1(અ) [3 ગુણ]
#

વ્યાખ્યાયિત કરો બિગ- ઓ નોટેશન, બિગ ઓમેગા નોટેશન, બિગ થીટા નોટેશન.

જવાબ:

સારણી: એસિમ્પ્ટોટિક નોટેશન સરખામણી

નોટેશનપ્રતીકવર્ણનઉપયોગ
બિગ-ઓO(f(n))ઉપલી હદસૌથી ખરાબ કેસ
બિગ ઓમેગાΩ(f(n))નીચલી હદસૌથી સારો કેસ
બિગ થીટાΘ(f(n))ચુસ્ત હદસરેરાશ કેસ
  • બિગ-ઓ નોટેશન: મહત્તમ સમય/સ્થળ જટિલતા વર્ણવે છે
  • બિગ ઓમેગા: ન્યૂનતમ સમય/સ્થળ જટિલતા વર્ણવે છે
  • બિગ થીટા: ચોક્કસ સમય/સ્થળ જટિલતા વર્ણવે છે

યાદ રાખવા માટે: “OWT - O ખરાબ માટે, Omega શ્રેષ્ઠ માટે, Theta ચુસ્ત માટે”

પ્રશ્ન 1(બ) [4 ગુણ]
#

સેટ વ્યાખ્યાયિત કરો. સેટ પર કરી શકાય તેવા વિવિધ ઓપરેશનો લખો.

જવાબ:

વ્યાખ્યા: સેટ એ અનન્ય તત્વોનો સંગ્રહ છે જેમાં કોઈ ડુપ્લિકેટ નથી.

સારણી: સેટ ઓપરેશનો

ઓપરેશનપ્રતીકવર્ણનઉદાહરણ
યુનિયનA ∪ Bબધા તત્વો જોડે છે{1,2} ∪ {2,3} = {1,2,3}
ઇન્ટરસેક્શનA ∩ Bસામાન્ય તત્વો{1,2} ∩ {2,3} = {2}
ડિફરન્સA - BA માં છે પણ B માં નથી{1,2} - {2,3} = {1}
સબસેટA ⊆ BA ના બધા તત્વો B માં છે{1} ⊆ {1,2} = સાચું
  • ઉમેરવું/દાખલ કરવું: નવું તત્વ ઉમેરવું
  • દૂર કરવું/કાઢવું: અસ્તિત્વમાં રહેલું તત્વ દૂર કરવું
  • સમાવેશ: તત્વ અસ્તિત્વમાં છે કે નહીં તપાસવું

યાદ રાખવા માટે: “UIDS - યુનિયન, ઇન્ટરસેક્શન, ડિફરન્સ, સબસેટ”

પ્રશ્ન 1(ક) [7 ગુણ]
#

ક્રિકેટર માટે Python ક્લાસ લખો. ક્લાસ માં ક્રિકેટરનું નામ, ટીમનું નામ અને ડેટા સભ્યો તરીકે રનનો સમાવેશ થાય છે. ક્લાસ કાર્યો નીચે મુજબ છે: ડેટા સભ્યોને ઇનિશિયલાઇઝ કરવા, રન સેટ કરવા અને રન ડિસ્પ્લે કરવા.

જવાબ:

class Cricketer:
    def __init__(self, name="", team="", run=0):
        self.name = name
        self.team = team
        self.run = run
    
    def set_run(self, run):
        self.run = run
    
    def display_run(self):
        print(f"ખેલાડી: {self.name}")
        print(f"ટીમ: {self.team}")
        print(f"રન: {self.run}")

# ઉદાહરણ ઉપયોગ
player = Cricketer("વિરાટ કોહલી", "ભારત", 100)
player.display_run()
  • કન્સ્ટ્રક્ટર: નામ, ટીમ અને રન ઇનિશિયલાઇઝ કરે છે
  • set_run(): રન વેલ્યુ અપડેટ કરે છે
  • display_run(): ખેલાડીની માહિતી બતાવે છે

યાદ રાખવા માટે: “CSD - કન્સ્ટ્રક્ટર, સેટ, ડિસ્પ્લે”

પ્રશ્ન 1(ક અથવા) [7 ગુણ]
#

વિદ્યાર્થીની માહિતી વાંચવા અને પ્રદર્શિત કરવા માટે વિદ્યાર્થી ક્લાસની રચના કરો, અને તેમાં getInfo() અને displayInfo() પદ્ધતિઓનો ઉપયોગ કરવામાં આવશે. જ્યાં getInfo() પ્રાઇવેટ પદ્ધતિ હશે.

જવાબ:

class Student:
    def __init__(self):
        self.name = ""
        self.roll_no = ""
        self.marks = 0
        self.__getInfo()  # પ્રાઇવેટ મેથડ કૉલ
    
    def __getInfo__(self):  # પ્રાઇવેટ મેથડ
        self.name = input("નામ દાખલ કરો: ")
        self.roll_no = input("રોલ નંબર દાખલ કરો: ")
        self.marks = int(input("માર્ક્સ દાખલ કરો: "))
    
    def displayInfo(self):
        print(f"નામ: {self.name}")
        print(f"રોલ નંબર: {self.roll_no}")
        print(f"માર્ક્સ: {self.marks}")

# ઉદાહરણ ઉપયોગ
student = Student()
student.displayInfo()
  • પ્રાઇવેટ મેથડ: ડબલ અંડરસ્કોર (__getInfo) વાપરે છે
  • કન્સ્ટ્રક્ટર: આપોઆપ પ્રાઇવેટ મેથડ કૉલ કરે છે
  • પબ્લિક મેથડ: displayInfo() વિદ્યાર્થીનો ડેટા બતાવે છે

યાદ રાખવા માટે: “PCP - પ્રાઇવેટ, કન્સ્ટ્રક્ટર, પબ્લિક”

પ્રશ્ન 2(અ) [3 ગુણ]
#

સ્ટેક અને ક્યૂ વચ્ચે તફાવત કરો.

જવાબ:

સારણી: સ્ટેક વર્સસ ક્યૂ સરખામણી

લક્ષણસ્ટેકક્યૂ
ક્રમLIFO (છેલ્લું અંદર, પહેલું બહાર)FIFO (પહેલું અંદર, પહેલું બહાર)
ઓપરેશનોPush, PopEnqueue, Dequeue
એક્સેસ પોઇન્ટએક છેડો (ટોપ)બે છેડા (ફ્રન્ટ અને રિયર)
ઉદાહરણપ્લેટનો સ્ટેકબેંકની કતાર
  • સ્ટેક: પુસ્તકોના ઢગલા જેવું - છેલ્લું ઉમેર્યું, પહેલું કાઢ્યું
  • ક્યૂ: રાહ જોવાની લાઇન જેવું - પહેલું આવ્યું, પહેલું સેવા મળી

યાદ રાખવા માટે: “SLIF QFIF - સ્ટેક LIFO, ક્યૂ FIFO”

પ્રશ્ન 2(બ) [4 ગુણ]
#

રિકર્સન વ્યાખ્યાયિત કરો. ઉદાહરણ સાથે સમજાવો.

જવાબ:

વ્યાખ્યા: ફંક્શન પોતાને જ નાની સમસ્યા સાથે કૉલ કરવું જ્યાં સુધી બેઝ કંડિશન ન મળે.

def factorial(n):
    # બેઝ કેસ
    if n <= 1:
        return 1
    # રિકર્સિવ કેસ
    return n * factorial(n-1)

# ઉદાહરણ: factorial(3)
# 3 * factorial(2)
# 3 * 2 * factorial(1)
# 3 * 2 * 1 = 6
  • બેઝ કેસ: રોકવાની શરત
  • રિકર્સિવ કેસ: ફંક્શન પોતાને કૉલ કરે છે
  • સમસ્યા ઘટાડવી: દરેક કૉલ નાની સમસ્યા હલ કરે છે

યાદ રાખવા માટે: “BRP - બેઝ, રિકર્સિવ, પ્રોબ્લેમ-રિડક્શન”

પ્રશ્ન 2(ક) [7 ગુણ]
#

સ્ટેકના સાઈઝ 5 તરીકે ધ્યાનમાં લો. સ્ટેક પર નીચેની કામગીરી લાગૂ કરો અને દરેક ઑપરેશન પછી સ્ટેટસ અને ટોપ પોઇન્ટર બતાવો. Push a,b,c pop

જવાબ:

સ્ટેક ઓપરેશનો ટ્રેસ:

PPPPuuuosssphhh:':':'::abc[0'[0'[0'[0:[0_1a1a1a1a1િ2_2b2b2b2::::િ33_3c3_3:c444_44_____]]]]]:::::-01211
  • Push ઓપરેશનો: ઇન્ડેક્સ 0 થી શરૂ કરીને તત્વો ઉમેરે છે
  • ટોપ પોઇન્ટર: છેલ્લે દાખલ કરેલા તત્વ તરફ પોઇન્ટ કરે છે
  • Pop ઓપરેશન: ટોપ તત્વ દૂર કરે છે, ટોપ પોઇન્ટર ઘટાડે છે

યાદ રાખવા માટે: “PTD - Push ટોપ ઘટાડવું”

પ્રશ્ન 2(અ અથવા) [3 ગુણ]
#

સ્ટેક અને ક્યૂની એપ્લિકેશનોની સૂચિ બનાવો.

જવાબ:

સારણી: સ્ટેક અને ક્યૂની એપ્લિકેશનો

ડેટા સ્ટ્રક્ચરએપ્લિકેશનો
સ્ટેકફંક્શન કૉલ્સ, અન્ડુ ઓપરેશનો, એક્સપ્રેશન ઇવેલ્યુએશન, બ્રાઉઝર હિસ્ટરી
ક્યૂપ્રોસેસ શેડ્યુલિંગ, પ્રિન્ટર ક્યૂ, BFS ટ્રેવર્સલ, રિક્વેસ્ટ હેન્ડલિંગ
  • સ્ટેક એપ્લિકેશનો: અન્ડુ-રિડુ, રિકર્સન, પાર્સિંગ
  • ક્યૂ એપ્લિકેશનો: ટાસ્ક શેડ્યુલિંગ, બફરિંગ, બ્રેડથ-ફર્સ્ટ સર્ચ

યાદ રાખવા માટે: “સ્ટેક FUBE, ક્યૂ SPBH”

પ્રશ્ન 2(બ અથવા) [4 ગુણ]
#

સ્ટેકનો ઉપયોગ કરીને નીચેના સમીકરણને પોસ્ટફિક્સ નોટેશનમાં કન્વર્ટ કરો: i) (ab)(c^d(d+e)-f) ii) a-b/(c*d/e)

જવાબ:

i) (ab)(c^d(d+e)-f)

પ્રતીકસ્ટેકઆઉટપુટ
((
a(a
*(*a
b(*ab
)ab*
**ab*
(*(ab*
c*(ab*c
^*(^ab*c
d*(^ab*cd
(*(^(ab*cd
d*(^(ab*cdd
+*(^(+ab*cdd
e*(^(+ab*cdde
)*(^ab*cdde+
)*ab*cdde+^
-*-ab*cdde+^
f*-ab*cdde+^f
abcdde+^f-

પરિણામ: abcdde+^f-

ii) a-b/(c*d/e)

પરિણામ: abcd*e/-

યાદ રાખવા માટે: “PEMDAS પોસ્ટફિક્સ માટે ઉલટું”

પ્રશ્ન 2(ક અથવા) [7 ગુણ]
#

લીસ્ટનો ઉપયોગ કરીને ક્યૂને અમલમાં મૂકવા માટે એક પ્રોગ્રામ ડેવલોપ કરો જે નીચેની કામગીરી કરે છે: enqueue, dequeue.

જવાબ:

class Queue:
    def __init__(self):
        self.queue = []
        self.front = 0
        self.rear = -1
    
    def enqueue(self, item):
        self.queue.append(item)
        self.rear += 1
        print(f"એનક્યૂ કર્યું: {item}")
    
    def dequeue(self):
        if self.front <= self.rear:
            item = self.queue[self.front]
            self.front += 1
            print(f"ડીક્યૂ કર્યું: {item}")
            return item
        else:
            print("ક્યૂ ખાલી છે")
            return None
    
    def display(self):
        if self.front <= self.rear:
            print("ક્યૂ:", self.queue[self.front:self.rear+1])
        else:
            print("ક્યૂ ખાલી છે")

# ઉદાહરણ ઉપયોગ
q = Queue()
q.enqueue('A')
q.enqueue('B')
q.dequeue()
q.display()
  • Enqueue: રિયર પર તત્વ ઉમેરે છે
  • Dequeue: ફ્રન્ટ પરથી તત્વ દૂર કરે છે
  • FIFO સિદ્ધાંત: પહેલું અંદર, પહેલું બહાર

યાદ રાખવા માટે: “ERF - Enqueue રિયર, ફ્રન્ટ”

પ્રશ્ન 3(અ) [3 ગુણ]
#

લિંક લિસ્ટના પ્રકારોની સૂચિ બનાવો. દરેક પ્રકારનું ગ્રાફિકલ રજૂઆત આપો.

જવાબ:

સારણી: લિંક લિસ્ટના પ્રકારો

પ્રકારવર્ણનડાયાગ્રામ
સિંગલીએક દિશા પોઇન્ટરA→B→C→NULL
ડબલીબે દિશા પોઇન્ટરોNULL←A⇄B⇄C→NULL
સર્ક્યુલરછેલ્લું પહેલા તરફ પોઇન્ટ કરેA→B→C→A
[[[િિ||િ|િિ|િિ]]:િ:[[]:||[િ]|][|[||NUL]L]][િ||]

યાદ રાખવા માટે: “SDC - સિંગલી, ડબલી, સર્ક્યુલર”

પ્રશ્ન 3(બ) [4 ગુણ]
#

સિંગલી લિંક લિસ્ટમાં આપેલ નોડ શોધવા માટે એક અલ્ગોરિધમ લખો.

જવાબ:

def search_node(head, key):
    current = head
    position = 0
    
    while current is not None:
        if current.data == key:
            return position
        current = current.next
        position += 1
    
    return -1  # નહીં મળ્યું

# અલ્ગોરિધમ સ્ટેપ્સ:
# 1. હેડ થી શરૂ કરો
# 2. વર્તમાન ડેટાને કી સાથે સરખાવો
# 3. જો મળ્યું તો પોઝિશન રિટર્ન કરો
# 4. આગલા નોડ પર જાઓ
# 5. અંત સુધી પુનરાવર્તન કરો
  • લીનિયર સર્ચ: હેડ થી ટેઇલ સુધી ટ્રાવર્સ કરો
  • ટાઇમ કોમ્પ્લેક્સિટી: O(n)
  • રિટર્ન: મળ્યું તો પોઝિશન, નહીં તો -1

યાદ રાખવા માટે: “SCMR - શરૂ, સરખાવો, આગળ વધો, રિટર્ન”

પ્રશ્ન 3(ક) [7 ગુણ]
#

સિંગલી લિંક લિસ્ટ પર પર નીચેની કામગીરી કરવા માટે પ્રોગ્રામનો અમલ કરો: 1)સિંગલી લિંક લિસ્ટ ની શરૂઆતમાં નોડ દાખલ કરો 2)સિંગલી લિંક લિસ્ટની શરૂઆતથી નોડ કાઢી નાખો

જવાબ:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class SinglyLinkedList:
    def __init__(self):
        self.head = None
    
    def insert_at_beginning(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node
        print(f"શરૂઆતમાં {data} દાખલ કર્યું")
    
    def delete_from_beginning(self):
        if self.head is None:
            print("લિસ્ટ ખાલી છે")
            return None
        
        deleted_data = self.head.data
        self.head = self.head.next
        print(f"શરૂઆતથી {deleted_data} કાઢ્યું")
        return deleted_data
    
    def display(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("NULL")

# ઉદાહરણ ઉપયોગ
ll = SinglyLinkedList()
ll.insert_at_beginning(10)
ll.insert_at_beginning(20)
ll.delete_from_beginning()
ll.display()
  • ઇન્સર્ટ: નોડ બનાવો, હેડ સાથે જોડો, હેડ અપડેટ કરો
  • ડિલીટ: ડેટા સ્ટોર કરો, હેડને આગળ ખસેડો, ડેટા રિટર્ન કરો

યાદ રાખવા માટે: “CLU - બનાવો, જોડો, અપડેટ”

પ્રશ્ન 3(અ અથવા) [3 ગુણ]
#

સર્ક્યુલર લિંક લિસ્ટ અને સિંગલી લિંક લિસ્ટ વચ્ચે તફાવત કરો.

જવાબ:

સારણી: સર્ક્યુલર વર્સસ સિંગલી લિંક લિસ્ટ

લક્ષણસિંગલી લિંક લિસ્ટસર્ક્યુલર લિંક લિસ્ટ
છેલ્લો નોડ પોઇન્ટ કરે છેNULLપહેલા નોડ (હેડ)
ટ્રાવર્સલલીનિયર (એક દિશા)સર્ક્યુલર (સતત)
અંત ડિટેક્શનnext == NULLnext == head
મેમરીઓછી (વધારાનું પોઇન્ટર નહીં)સમાન સ્ટ્રક્ચર
  • સર્ક્યુલર ફાયદો: NULL પોઇન્ટરો નહીં, સતત ટ્રાવર્સલ
  • સિંગલી ફાયદો: સાદું અમલીકરણ, સ્પષ્ટ અંત

યાદ રાખવા માટે: “CNTE - સર્ક્યુલર કોઈ સમાપ્તિ અંત નહીં”

પ્રશ્ન 3(બ અથવા) [4 ગુણ]
#

સંક્ષિપ્તમાં લિંક લિસ્ટ સૂચિની ત્રણ એપ્લિકેશનો સમજાવો.

જવાબ:

સારણી: લિંક લિસ્ટ એપ્લિકેશનો

એપ્લિકેશનવર્ણનફાયદો
ડાયનામિક મેમરી એલોકેશનમેમરી બ્લોક્સ મેનેજ કરે છેકાર્યક્ષમ મેમરી ઉપયોગ
સ્ટેક/ક્યૂનું અમલીકરણલિંક સ્ટ્રક્ચર ઉપયોગ કરે છેડાયનામિક સાઇઝ
પોલિનોમિયલ રજૂઆતગુણાંક અને પાવર સ્ટોર કરે છેસરળ અંકગણિત ઓપરેશનો
  • મ્યુઝિક પ્લેલિસ્ટ: ગીતો ડાયનામિક ઉમેરવા/દૂર કરવા
  • બ્રાઉઝર હિસ્ટરી: પાછળ/આગળ નેવિગેટ કરવા
  • ઇમેજ વ્યૂઅર: પહેલું/આગલું ઇમેજ નેવિગેશન

યાદ રાખવા માટે: “DIP - ડાયનામિક, અમલીકરણ, પોલિનોમિયલ”

પ્રશ્ન 3(ક અથવા) [7 ગુણ]
#

સર્ક્યુલર લિંક લિસ્ટ ને બનાવવા અને પ્રદર્શિત કરવા માટે એક પ્રોગ્રામ ડેવલોપ કરો.

જવાબ:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class CircularLinkedList:
    def __init__(self):
        self.head = None
    
    def insert(self, data):
        new_node = Node(data)
        
        if self.head is None:
            self.head = new_node
            new_node.next = self.head
        else:
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node
            new_node.next = self.head
    
    def display(self):
        if self.head is None:
            print("લિસ્ટ ખાલી છે")
            return
        
        current = self.head
        print("સર્ક્યુલર લિસ્ટ:")
        while True:
            print(current.data, end=" -> ")
            current = current.next
            if current == self.head:
                break
        print(f"{self.head.data} (હેડ પર પાછા)")

# ઉદાહરણ ઉપયોગ
cll = CircularLinkedList()
cll.insert(10)
cll.insert(20)
cll.insert(30)
cll.display()
  • બનાવટ: છેલ્લા નોડને હેડ સાથે જોડવું
  • ડિસ્પ્લે: ફરીથી હેડ પર પહોંચવા સુધી બંધ કરવું

યાદ રાખવા માટે: “CLH - બનાવો, જોડો, હેડ”

પ્રશ્ન 4(અ) [3 ગુણ]
#

સિલેક્શન સૉર્ટ પદ્ધતિનો પ્રોગ્રામ લખો.

જવાબ:

def selection_sort(arr):
    n = len(arr)
    
    for i in range(n):
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    
    return arr

# ઉદાહરણ ઉપયોગ
data = [64, 34, 25, 12, 22]
sorted_data = selection_sort(data)
print("સૉર્ટેડ એરે:", sorted_data)
  • મિનિમમ શોધો: અનસૉર્ટેડ ભાગમાં
  • સ્વેપ: પ્રથમ અનસૉર્ટેડ એલિમેન્ટ સાથે
  • ટાઇમ કોમ્પ્લેક્સિટી: O(n²)

યાદ રાખવા માટે: “FMS - શોધો, મિનિમમ, સ્વેપ”

પ્રશ્ન 4(બ) [4 ગુણ]
#

નીચેના ડેટાને ચડતા ક્રમમાં ગોઠવવા માટે ઇન્સર્શન સૉર્ટ લાગૂ કરો. 25 15 35 20 30 5 10

જવાબ:

ઇન્સર્શન સૉર્ટ સ્ટેપ્સ:

શરૂઆત: [25, 15, 35, 20, 30, 5, 10]

પાસ 1: [15, 25, 35, 20, 30, 5, 10]  (15 ઇન્સર્ટ કર્યું)
પાસ 2: [15, 25, 35, 20, 30, 5, 10]  (35 જગ્યાએ)
પાસ 3: [15, 20, 25, 35, 30, 5, 10]  (20 ઇન્સર્ટ કર્યું)
પાસ 4: [15, 20, 25, 30, 35, 5, 10]  (30 ઇન્સર્ટ કર્યું)
પાસ 5: [5, 15, 20, 25, 30, 35, 10]  (5 ઇન્સર્ટ કર્યું)
પાસ 6: [5, 10, 15, 20, 25, 30, 35]  (10 ઇન્સર્ટ કર્યું)

અંતિમ: [5, 10, 15, 20, 25, 30, 35]
  • પદ્ધતિ: એલિમેન્ટ લો, સૉર્ટેડ ભાગમાં સ્થાન શોધો
  • સરખામણીઓ: કુલ 15 સરખામણીઓ
  • શિફ્ટ્સ: જગ્યા બનાવવા માટે એલિમેન્ટ્સ ખસેડવા

યાદ રાખવા માટે: “TFI - લેવું, શોધવું, ઇન્સર્ટ કરવું”

પ્રશ્ન 4(ક) [7 ગુણ]
#

લીનિયર સર્ચનો ઉપયોગ કરીને લિસ્ટમાંથી ચોક્કસ તત્વ શોધવા માટે પાયથોન પ્રોગ્રામનો અમલ કરો.

જવાબ:

def linear_search(arr, target):
    comparisons = 0
    
    for i in range(len(arr)):
        comparisons += 1
        if arr[i] == target:
            print(f"એલિમેન્ટ {target} ઇન્ડેક્સ {i} પર મળ્યું")
            print(f"સરખામણીઓની સંખ્યા: {comparisons}")
            return i
    
    print(f"એલિમેન્ટ {target} નહીં મળ્યું")
    print(f"સરખામણીઓની સંખ્યા: {comparisons}")
    return -1

def linear_search_all_positions(arr, target):
    positions = []
    for i in range(len(arr)):
        if arr[i] == target:
            positions.append(i)
    return positions

# ઉદાહરણ ઉપયોગ
data = [10, 25, 30, 15, 20, 30, 35]
target = 30

result = linear_search(data, target)
all_positions = linear_search_all_positions(data, target)
print(f"{target} ની બધી પોઝિશન: {all_positions}")
  • સિક્વન્શિયલ સર્ચ: દરેક એલિમેન્ટ એક પછી એક તપાસવું
  • ટાઇમ કોમ્પ્લેક્સિટી: O(n) સૌથી ખરાબ કેસ
  • બેસ્ટ કેસ: O(1) જો પ્રથમ પોઝિશન પર મળે

યાદ રાખવા માટે: “CEO - દરેક એક તપાસો”

પ્રશ્ન 4(અ અથવા) [3 ગુણ]
#

ઇન્સર્શન સૉર્ટ પદ્ધતિનો પ્રોગ્રામ લખો.

જવાબ:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        
        arr[j + 1] = key
    
    return arr

# ઉદાહરણ ઉપયોગ
data = [12, 11, 13, 5, 6]
print("મૂળ:", data)
sorted_data = insertion_sort(data.copy())
print("સૉર્ટેડ:", sorted_data)
  • કી એલિમેન્ટ: વર્તમાન એલિમેન્ટ જે ઇન્સર્ટ કરવાનું છે
  • જમણી બાજુ શિફ્ટ: મોટા એલિમેન્ટ્સ જમણી બાજુ ખસે છે
  • ઇન્સર્ટ: યોગ્ય સ્થાને કી

યાદ રાખવા માટે: “KSI - કી, શિફ્ટ, ઇન્સર્ટ”

પ્રશ્ન 4(બ અથવા) [4 ગુણ]
#

નીચેના ડેટાને ક્વિક સૉર્ટ લાગૂ કરો અને તેમને યોગ્ય રીતે ગોઠવો. 5 6 1 8 2 9 10 15 7 13

જવાબ:

ક્વિક સૉર્ટ સ્ટેપ્સ:

શરૂઆત: [5, 6, 1, 8, 2, 9, 10, 15, 7, 13]
પિવોટ: 5 (પ્રથમ એલિમેન્ટ)

પાર્ટિશન 1: [1, 2] 5 [6, 8, 9, 10, 15, 7, 13]

ડાબો સબએરે [1, 2]:
પિવોટ: 1 → [] 1 [2]
પરિણામ: [1, 2]

જમણો સબએરે [6, 8, 9, 10, 15, 7, 13]:
પિવોટ: 6 → [] 6 [8, 9, 10, 15, 7, 13]

પાર્ટિશનિંગ ચાલુ...

અંતિમ: [1, 2, 5, 6, 7, 8, 9, 10, 13, 15]
  • વિભાજન: પિવોટ પસંદ કરો, તેની આસપાસ પાર્ટિશન કરો
  • જીતો: સબએરેને રીકર્સિવલી સૉર્ટ કરો
  • સરેરાશ સમય: O(n log n)

યાદ રાખવા માટે: “DCC - વિભાજન, જીતો, જોડો”

પ્રશ્ન 4(ક અથવા) [7 ગુણ]
#

મર્જ સૉર્ટ અલ્ગોરિધમનો અમલ કરો.

જવાબ:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    result.extend(left[i:])
    result.extend(right[j:])
    
    return result

# ઉદાહરણ ઉપયોગ
data = [38, 27, 43, 3, 9, 82, 10]
sorted_data = merge_sort(data)
print("સૉર્ટેડ એરે:", sorted_data)
  • વિભાજન: એરેને અડધામાં વિભાજિત કરો
  • મર્જ: સૉર્ટેડ સબએરેને જોડો
  • ટાઇમ કોમ્પ્લેક્સિટી: હંમેશા O(n log n)

યાદ રાખવા માટે: “DSM - વિભાજન, સૉર્ટ, મર્જ”

પ્રશ્ન 5(અ) [3 ગુણ]
#

ટૂંકી નોંધ લખો: એપ્લિકેશન ઓફ ટ્રી.

જવાબ:

સારણી: ટ્રી એપ્લિકેશનો

એપ્લિકેશનવર્ણનઉદાહરણ
ફાઇલ સિસ્ટમડિરેક્ટરી સ્ટ્રક્ચરફોલ્ડર અને ફાઇલો
એક્સપ્રેશન પાર્સિંગગાણિતિક સમીકરણો(a+b)*c
ડેટાબેઝ ઇન્ડેક્સિંગઝડપી ડેટા પુનઃપ્રાપ્તિડેટાબેઝમાં B-ટ્રીઝ
  • ડિસિઝન ટ્રીઝ: AI અને મશીન લર્નિંગ
  • હફમેન કોડિંગ: ડેટા કોમ્પ્રેશન
  • ગેમ ટ્રીઝ: ચેસ, ટિક-ટેક-ટો

યાદ રાખવા માટે: “FED - ફાઇલ, એક્સપ્રેશન, ડેટાબેઝ”

પ્રશ્ન 5(બ) [4 ગુણ]
#

વિવિધ ટ્રી ટ્રાવર્સલ પદ્ધતિઓ સમજાવો.

જવાબ:

સારણી: ટ્રી ટ્રાવર્સલ પદ્ધતિઓ

પદ્ધતિક્રમપ્રક્રિયા
ઇનઓર્ડરડાબે-રૂટ-જમણેLNR
પ્રીઓર્ડરરૂટ-ડાબે-જમણેNLR
પોસ્ટઓર્ડરડાબે-જમણે-રૂટLRN
DB:AED:C::BADEBEADBCECCA
  • ઇનઓર્ડર: BST માટે સૉર્ટેડ સિક્વન્સ આપે છે
  • પ્રીઓર્ડર: ટ્રી કોપી કરવા માટે વપરાય છે
  • પોસ્ટઓર્ડર: ટ્રી ડિલીટ કરવા માટે વપરાય છે

યાદ રાખવા માટે: “LNR PNL LRN ઇન-પ્રી-પોસ્ટ માટે”

પ્રશ્ન 5(ક) [7 ગુણ]
#

બાઇનરી સર્ચ ટ્રી પર નીચેની કામગીરી કરવા માટે મેન્યૂ સંચાલિત પ્રોગ્રામ લખો: BST ટ્રી બનાવવા માટેનો પ્રોગ્રામ.

જવાબ:

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

class BST:
    def __init__(self):
        self.root = None
    
    def insert(self, data):
        self.root = self._insert_recursive(self.root, data)
    
    def _insert_recursive(self, node, data):
        if node is None:
            return TreeNode(data)
        
        if data < node.data:
            node.left = self._insert_recursive(node.left, data)
        elif data > node.data:
            node.right = self._insert_recursive(node.right, data)
        
        return node
    
    def inorder(self, node):
        if node:
            self.inorder(node.left)
            print(node.data, end=" ")
            self.inorder(node.right)

def main():
    bst = BST()
    
    while True:
        print("\n1. દાખલ કરો")
        print("2. દર્શાવો (ઇનઓર્ડર)")
        print("3. બહાર નીકળો")
        
        choice = int(input("પસંદગી દાખલ કરો: "))
        
        if choice == 1:
            data = int(input("ડેટા દાખલ કરો: "))
            bst.insert(data)
        elif choice == 2:
            print("BST (ઇનઓર્ડર):", end=" ")
            bst.inorder(bst.root)
            print()
        elif choice == 3:
            break

if __name__ == "__main__":
    main()
  • BST ગુણધર્મ: ડાબે < રૂટ < જમણે
  • ઇન્સર્શન: સરખાવો અને ડાબે/જમણે જાઓ
  • મેન્યૂ ડ્રિવન: વપરાશકર્તા-મૈત્રીપૂર્ણ ઇન્ટરફેસ

યાદ રાખવા માટે: “CIM - સરખાવો, ઇન્સર્ટ, મેન્યૂ”

પ્રશ્ન 5(અ અથવા) [3 ગુણ]
#

વ્યાખ્યાયિત કરો અને ઉદાહરણો આપો: સ્ટ્રિક્ટ બાઇનરી ટ્રી અને કમ્પ્લીટ બાઇનરી ટ્રી.

જવાબ:

સારણી: બાઇનરી ટ્રી પ્રકારો

પ્રકારવ્યાખ્યાઉદાહરણ
સ્ટ્રિક્ટ બાઇનરી ટ્રીદરેક નોડને 0 અથવા 2 બાળકો છેદરેક આંતરિક નોડને બરાબર 2 બાળકો
કમ્પ્લીટ બાઇનરી ટ્રીછેલ્લા સિવાય બધા લેવલ ભરેલા, ડાબેથી જમણે ભરેલાબીજા છેલ્લા લેવલ સુધી પરફેક્ટ સ્ટ્રક્ચર
DિBBEADAFCCE::
  • સ્ટ્રિક્ટ: એક બાળક વાળો કોઈ નોડ નહીં
  • કમ્પ્લીટ: શ્રેષ્ઠ સ્પેસ ઉપયોગ

યાદ રાખવા માટે: “SC - સ્ટ્રિક્ટ કમ્પ્લીટ”

પ્રશ્ન 5(બ અથવા) [4 ગુણ]
#

બાઇનરી ટ્રીની મૂળભૂત પરિભાષા સમજાવો: લેવલ નંબર, ડિગ્રી, ઇન-ડિગ્રી, આઉટ-ડિગ્રી, લીફ નોડ.

જવાબ:

120:::DBAE:CF(():D,E,F)

સારણી: બાઇનરી ટ્રી પરિભાષા

શબ્દવ્યાખ્યાઉદાહરણ
લેવલ નંબરરૂટથી અંતર (રૂટ = 0)A=0, B=1, D=2
ડિગ્રીબાળકોની સંખ્યાA=2, B=2, C=1
ઇન-ડિગ્રીઆવતા એજની સંખ્યાબધા નોડ = 1 (સિવાય રૂટ = 0)
આઉટ-ડિગ્રીજતા એજની સંખ્યાડિગ્રી સમાન
લીફ નોડબાળકો ન હોય તેવો નોડD, E, F

યાદ રાખવા માટે: “LDIOL - લેવલ, ડિગ્રી, ઇન-આઉટ, લીફ”

પ્રશ્ન 5(ક અથવા) [7 ગુણ]
#

બાઇનરી સર્ચ ટ્રી પર નીચેની કામગીરી કરવા માટે મેન્યૂ સંચાલિત પ્રોગ્રામ લખો: BST માં એક એલિમેન્ટ દાખલ કરો.

જવાબ:

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

class BST:
    def __init__(self):
        self.root = None
    
    def insert(self, data):
        if self.root is None:
            self.root = TreeNode(data)
            print(f"રૂટ નોડ {data} બનાવ્યું")
        else:
            self._insert_helper(self.root, data)
    
    def _insert_helper(self, node, data):
        if data < node.data:
            if node.left is None:
                node.left = TreeNode(data)
                print(f"{data} ને {node.data} ની ડાબી બાજુએ દાખલ કર્યું")
            else:
                self._insert_helper(node.left, data)
        elif data > node.data:
            if node.right is None:
                node.right = TreeNode(data)
                print(f"{data} ને {node.data} ની જમણી બાજુએ દાખલ કર્યું")
            else:
                self._insert_helper(node.right, data)
        else:
            print(f"ડેટા {data} પહેલેથી અસ્તિત્વમાં છે")
    
    def display_inorder(self, node, result):
        if node:
            self.display_inorder(node.left, result)
            result.append(node.data)
            self.display_inorder(node.right, result)

def main():
    bst = BST()
    
    while True:
        print("\n--- BST ઓપરેશનો ---")
        print("1. એલિમેન્ટ દાખલ કરો")
        print("2. BST દર્શાવો (ઇનઓર્ડર)")
        print("3. બહાર નીકળો")
        
        choice = int(input("તમારી પસંદગી દાખલ કરો: "))
        
        if choice == 1:
            data = int(input("દાખલ કરવાનું એલિમેન્ટ દાખલ કરો: "))
            bst.insert(data)
        elif choice == 2:
            result = []
            bst.display_inorder(bst.root, result)
            print("BST એલિમેન્ટ્સ (સૉર્ટેડ):", result)
        elif choice == 3:
            print("બહાર નીકળી રહ્યા છીએ...")
            break
        else:
            print("અયોગ્ય પસંદગી!")

if __name__ == "__main__":
    main()
  • ઇન્સર્ટ લોજિક: વર્તમાન નોડ સાથે સરખાવો, ડાબે/જમણે જાઓ
  • રિકર્સિવ એપ્રોચ: સ્વચ્છ અને કાર્યક્ષમ અમલીકરણ
  • મેન્યૂ સિસ્ટમ: ઇન્ટરેક્ટિવ વપરાશકર્તા ઇન્ટરફેસ

યાદ રાખવા માટે: “CRL - સરખાવો, રિકર્સિવ, ડાબે/જમણે”

સંબંધિત

ડેટા સ્ટ્રક્ચર એન્ડ એપ્લિકેશન (1333203) - સમર 2024 સોલ્યુશન
19 મિનિટ
Study-Material Solutions Data-Structure 1333203 2024 Summer
એન્ટેના અને વેવ પ્રોપેગેશન (4341106) - સમર 2024 સોલ્યુશન
21 મિનિટ
Study-Material Solutions Antenna Wave-Propagation 4341106 2024 Summer
કમ્પ્યુટર નેટવર્કિંગ (4343202) - સમર 2024 સોલ્યુશન
24 મિનિટ
Study-Material Solutions Computer-Networking 4343202 2024 Summer
Digital & Data Communication (4343201) - Summer 2025 Solution
15 મિનિટ
Study-Material Solutions Digital-Communication 4343201 2025 Summer
OOPS અને પાયથોન પ્રોગ્રામિંગ (4351108) - સમર 2025 સોલ્યુશન
23 મિનિટ
Study-Material Solutions Python 4351108 2025 Summer
Software Engineering (4353202) - Summer 2025 Solution
19 મિનિટ
Study-Material Solutions Software-Engineering 4353202 2025 Summer