Array
ऐरे समान डाटा तत्वों
के परिमित क्रमो का संग्रह है जोकि क्रमिक मैमोरी स्थानों में संग्रहित होता है l
Array दो प्रकार के
होते है :
1.
एकल या एक आयामी ऐरे
2. बहु आयामी ऐरे
एकल या एक आयामी ऐरे (One
Dimensional Array)
आइटमो की एक सूची के
लिए केवल एक सबस्क्रिप्ट का उपयोग करके एक variable नाम दिया जाता है और इस तरह के
variable को one dimensional array कहा जाता है l
One Dimensional Array |
एक आयामी ऐरे की घोषणा(Declaration)
– किसी भी variable की तरह, ऐरे को भी उपयोग से पहले declare किया जाना चाहिए ताकि
कम्पाईलर उनके लिए मैमोरी में स्पेस आवंटित करसके l ऐरे को निम्न प्रकार से
declare किया जाता है l
type variable-name[size];
example
float height[50];
char name[10];
type ऐरे में संग्रहित
होने वाले तत्वों के प्रकार को बताता है जैसे की int, float, और char और variable
name ऐरे के नाम को बताता है जैसे की height, group और name है size ऐरे में स्टोर
किये जा सकने वाले तत्वों की अधिकतम संख्या को इंगित करता है l C प्रोग्रामिंग
language, करेक्टर स्ट्रिंग को करेक्टर के ऐरे के रूप में ही प्रबंध करता है l
पांच तत्वों के लिए एक
ऐरे की घोषणा: int number[5];
एकल या एक आयामी ऐरे का
प्रारम्भ : एक ऐरे को declaration के बाद उसके तत्व प्रारम्भ किये जाते है सी
प्रोग्रामिंग में एक ऐरे निम्न चरणों में प्रारम्भ किया जा सकता है :
Compile Time
Run Time
Compile time execution
– जब एक ऐरे के declaration के साथ उसे प्रारम्भ किया जाता है तो ऐरे निम्न प्रकार
से प्रारम्भ होगा: type array-name[size] = { list of values };
लिस्ट में मानो को कोमा
से अलग किया जाता है उदाहरण के लिए
int number[3] = {0,5,4};
ऊपर दिए गये स्टेटमेंट
में 3 आकर का एक number नाम का ऐरे है और हर तत्व को वैल्यू आवंटित होगी l लिस्ट
में वैल्यू की संख्या ऐरे साइज़ की तुलना में कम है, तो यह केवल कुछ ऐरे तत्व को
वैल्यू आवंटित करेगा l शेष तत्वों को स्वचालित रूप से शून्य आवंटित हो जायेगा l
याद रखे, घोषित आकर की तुलना में अधिक वैल्यू है, तो एक त्रुटी शो होगा l
Run time execution –
एक ऐरे को स्पष्ट रूप से चलाने के लिए रन टाइम प्रारम्भ किया जा सकता है उदाहरण के
लिए निम्नलिखित सी प्रोग्राम के खंड पर विचार करे l
for(i=0;i<10;i++)
{
scanf(“%d”, &x[i]);
}
उदाहरण के लिए ऊपर
किबोर्ड से वैल्यू देते है रन टाइम में लूपिंग स्टेटमेंट जरुरी है असाइन्मेंट
ऑपरेटर की सहायता से एक एक वैल्यू ऐरे में स्टोर करते है
One Dimensional Array
Program :
#include<stdio.h>
void main()
{ int array[5],i;
printf(“Enter 5 number
तो store them in array \n”);
for(i=0;i<5;i++)
{
scanf(“%d”,&array[i]);
}
printf(“Element in the
array are - \n \n”);
for(i=0;i<5;i++)
{
printf(“Element stored
at a[%d]=%d \n”,i,array[i]);
}
getch();
}
input = Enter 5
elements in the array – 23 45 32 25 45
output = Elements in
the array are –
Element stored at a[0]-23
Element stored at a[1]-45
Element stored at a[2]-32
Element stored at a[3]-25
Element stored at a[4]-45
बहु आयामी ऐरे (Multidimensional
array)
ऐरे का ऐरे एक
multidimensional array कहलाता है l सामान्य रूप से बहुआयामी ऐरे की घोषणा निम्न प्रकार
से होती है ltype variable-name [size1] [size2]---[sizeN];
बहुआयामी ऐरे का सरलतम
रूप दो आयामी ऐरे है उदाहरण :
int x [3] [4];
उपरोक्त x एक दो आयामी
(2D) ऐरे है l ऐरे में 12 तत्व है l यहाँ x 3 पंक्ति के साथ तालिका के रूप में ऐरे
है l और प्रत्येक पंक्ति में 4 स्तम्भ है l
|
Column 1 |
Column 2 |
Column 3 |
Column 4 |
Row 1 |
x[0][0] |
x[0][1] |
x[0][2] |
x[0][3] |
Row2 |
x[1][0] |
x[1][1] |
x[1][2] |
x[1][3] |
Row 3 |
x[2][0] |
x[2][1] |
x[2][2] |
x[2][3] |
Two Dimensional Array
का प्रारम्भ : एक आयामी ऐरे की तरह, 2D ऐरे को भी दोनों प्रकार से कम्पाइल टाइम व
रन टाइम से प्रारम्भ किया जा सकता है
Compile time execution-
जब एक ऐरे का डिक्लेरेशन के साथ प्रारम्भ किया जाता है तो दो आयामी ऐरे निम्न
प्रकार से प्रारम्भ होगा :
int table-[2][3]={
{0,2,5}
{1,3,0}
};
Run time execution- एक
ऐरे को स्पस्ट रूप से चलाने के लिए रन टाइम आरम्भ किया जा सकता है दो आयामी ऐरे
लूप स्ट्रक्चर की मदद से आरम्भ करते है l दो लूप स्ट्रक्चर उपयोग में ली जाती है l
जिसमे आउटपुट लूप पंक्ति के लिए एवं इनर लूप कॉलम के उपयोग में आती है l उदाहरण के
लिए निम्नलिखित सी प्रोग्राम के खंड पर विचार करे l
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf(“%d”,&ar1[i][j]);
}
}
2D ऐरे प्रोग्राम
#include<stdio.h>
#include<conio.h>
void main()
{
int array[3][3],i,j,count=0;
/* Run time
initialization */
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
count++;
array[i][j]=count;
printf(“\n”);
}
getch();
}
Output –
1 2 3
4 5 6
7 8 9
One Dimensional Array Address Calculation (एकल आयामी ऐरे में पता गणना)
एक ऐरे “A [I]” के एक तत्व की
गणना निम्न सूत्र के उपयोग से करते है –
Address of A [I] = B + W * (I -
LB)
Where,
B = आधार पता
W = ऐरे में उपस्थित एक तत्व की
स्टोरेज साइज़
I = जिस तत्व का पता ज्ञात करना
है उसका सबस्क्रिप्ट
LB = निचली सीमा / उपलब्ध नही
होने पर शून्य माने
Example : एक ऐरे [1300... ..1900] का
आधार पता 1020 और प्रत्येक तत्व का आकार मैमोरी में 2 बाइट्स के रूप में है l B[1700],
का पता गणना कीजिये
Solution: दिए गये मान निम्न है B
=1020, LB =1300, W =2, I =1700
A[I] का पता = B + W * (I - LB)
= 1020 + 2 * (1700 – 1300)
= 1020 + 2 * 400
= 1020 + 800
= 1820 Ans.
Two
Dimensional Array Address Calculation (दो आयामी ऐरे में पता गणना)
मैमोरी में एक 2 D ऐरे
तत्वों को संग्रह करते समय इन्हें क्रमिक मैमोरी लोकेशन आवंटित किये जाते है l
इसलिए उसके भंडारण को सक्षम करने के लिए 2D ऐरे को लीनियराइज करते है l लीनियराइज
करने के दो तरीके होते है l रो मेजर और कॉलम मेजर l
2 कॉलम प्रमुख प्रणाली
(Column Major System)
Row Major System –
पंक्ति प्रमुख प्रणाली में एक लोकेशन का पता निम्न सूत्र का उपयोग करके किया जाता
है:
A [I][J] तत्व का पता =
B + W * [N
* (I
– Lr)+(J – Lc)]
Column major System – कॉलम
प्रमुख प्रणाली में एक लोकेशन का पता निम्न सूत्र का उपयोग करके किया जाता है l
A [I][J] तत्व का पता =
B + W * [(I
– Lr)+M * (J
– Lc)]
ऐरे पर बुनियादी ऑपरेशन
(Basic operations of Array) – निम्नलिखित basic operations ऐरे पर किये जाते है
Traversing – एक डाटा स्ट्रक्चर मे मोजूद सभी डाटा तत्वों के प्रसंस्करण (प्रोसेसिंग) को terversing कहते है l
Insertion – इंसर्शन का अर्थ एक डाटा स्ट्रक्चर में एक नये डाटा तत्व को जोड़ना l
Deletion – deletion का अर्थ एक डाटा स्ट्रक्चर में एक डाटा तत्व को हटाना अगर वह मोजूद है l
Search – एक डाटा
स्ट्रक्चर में निर्दिष्ट डाटा तत्व को खोजने को सर्च कहते है l
Update – दिए गये
सूचकांक में एक तत्व अपडेट करता है l
Traversing –
एक डाटा स्ट्रक्चर में मोजूद सभी डाटा तत्वों के प्रसंस्करण को traversing कहते है
l निम्नलिखित एल्गोरिथम से लीनियर ऐरे को ट्रवर्स कर सकते है l
1.
Repeat for I = LB to UB
2.
Apply PROCESS to A[I]
3.
Exit
Insertion – insertion
का अर्थ एक डाटा स्ट्रक्चर में एक नये डाटा तत्व को जोड़ना l निम्नलिखित एल्गोरिथम
से लीनियर ऐरे में इन्सर्ट कर सकते है l
Algorithm – Let LA be
a linear Array with N element and K is a posiitive integer such that K<=N.
following is the algorithm where ITEM is inserted into the Kth position of LA –
1.
Start
2.
Set J= N
3.
Set N=N+1
4.
Repeat steps 5 and 6 while J
>= K
5.
Set LA[J+1] = LA[J]
6.
Set J=j-1
7.
Set LA[K] =ITEM
8.
Stop
C program for
insertion:
#include<stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int item =10, k=3,
n=5;
int i =0, j =n;
printf(“The original
array element are :\n”);
for(i=0;i<n;i++){
printf(“LA[%d] =%d \n”,
i, LA[i]);
}
n=n+1;
while(j>=k) {
LA[j+1]=LA[j];
j=j-1;
}
LA[k] = item;
printf(“The array
elements after insertion :\n”);
for(i=0;i<n;i++) {
printf(“LA[%d] =%d \n”,
i, LA[i]);
}
}
जब उपरोक्त कोड compile
और run होगा तो output निम्नानुसार होगा :
The original array
element are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array element
after insertion :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 10
LA[4] = 7
LA[5] = 8
Deletion
– डिलीशन का अर्थ एक डाटा तत्व को हटाना होता है यदि वह मोजूद है l निम्नलिखित
एल्गोरिथम से लीनियर ऐरे के तत्वों को डिलीट कर सकते है l
Algorithm – consider
LA is a linear array with N elements and K is a positive integer such that
K<=N. following is the algorithm to delete an element available at the Kth position
of LA.
1.
start
2.
set J=K
3.
repeat steps 4 and 5 while J <
N
4.
set LA[J-1]=LA[J]
5.
set J = J + 1
6.
set N = N-1
7.
stop
Search
(सर्च) – एक डाटा स्ट्रक्चर में निर्दिष्ट डेटा तत्व को खोजने
को सर्च कहते है लीनियर एरे में सर्च दो प्रकार की होती है
1.
linear search
2.
Binary search
Linear
search - लीनियर
सर्च बुनियादी और सरल सर्च एल्गोरिथम है l लीनियर सर्च में तत्व और मान को तब तक
सर्च करते है जब तक मिल नही जाता है l इसमें दिए गये तत्वों को ऐरे में उपलब्ध सभी
तत्वों से तुलना करते है एवं मिलान होने पर ऐरे इंडेक्स का मान प्राप्त होता है
अन्यथा -1 l लीनियर सर्च सॉर्टेड और अनसॉर्टेड मानो पर लागु करते है l जब तत्वों
की संख्या कम हो l लीनियर सर्च की एल्गोरिथम निम्न प्रकार है
Consider LA is a
linear array with N elements and K is a positive integer such that K<=N. following
is the algorithm to find an element with a value of ITEM using sequential
search
1.
start
2.
set J=0
3.
repeat step 4 and 5 while J<N
4.
IF LA[J] is equal ITEM THEN GOTO
STEP 6
5.
set J=J+1
6.
PRINT J, ITEM
7.
stop
Binary
Search - बाइनरी
सर्च सॉर्टेड ऐरे या लिस्ट पर लागु किया जाता है l सर्वप्रथम हम दिये गये तत्व की
ऐरे के बिच के तत्व से तुलना करते यदि तत्व के मान का मिलान हो जाता है तो ऐरे का
इंडेक्स मान रिटर्न करता है l यदि तत्व का मान कम है तो निचले आधे हिस्से में होगा
अन्यथा ऊपरी आधे हिस्से में होगा l बाइनरी सर्च का उपयोग तत्वों की संख्या अधिक
होने पर किया जाता है l निम्नलिखित बाइनरी सर्च का एल्गोरिथम है l
Compare x with the
middle element.
If x matches with
middle element, we return the mid index.
Else if x is greater
then the mid element, then x can only lie in right half subarray after the mid
element. so we recur for right half.
Else (x is smaller)
recur for the left half.
UPDATE –
दिए गये सूचकांक में एक तत्व अपडेट करता है l निम्नलिखित एल्गोरिथम एक तत्व को ऐरे
में अपडेट करता है l
Consider LA is a
linear array with N element and K is a positive integer such that K<=N. following
is the algorithm to update available at the kth position of LA.
1.
start
2.
set LA[k-1]=ITEM
3.
stop
C
मै करैक्टर स्ट्रिंग – स्ट्रिंग वास्तव में एक आयामी
करैक्टर ऐरे है l जिसमे अंत में Null करैक्टर ‘\0’ होता है l निम्नलिखित डिक्लेरेशन
और इनिशलाईजेशन “Hello” शब्द से बनी स्ट्रिंग क्रियेट करता है l ऐरे के अंत में null
करैक्टर जोड़ने के लिए करैक्टर स्ट्रिंग की लम्बाई “Hello” शब्द में कुल अक्षरों की
संख्या से एक अधिक है l
char greeting[6]={‘H’,
‘e’, ‘i’, ‘o’, ‘\0’};
char greeting[]=”Hello”;
वास्तव में आप स्ट्रिंग
के अंत में null करैक्टर को इन्सर्ट नही करते, सी कम्पाइलर स्वचालित रूप से
स्ट्रिंग के अंत में null करैक्टर को इन्सर्ट कर देता है जब यह ऐरे को इनिशलाईज
करता है l
Static
and dynamic memory allocation – डायनामिक मैमोरी
आलोकेशन रन टाइम पर किया जाता है l जबकि स्टेटिक मैमोरी अलोकेशन रन टाइम से पहले
किया जाता है, लेकिन वेरिएबल के मानो को रन टाइम पर बदला जा सकता है
स्टैटिक मैमोरी अलोकेशन
रनिंग टाइम में बचत करता है, लेकिन सभी मामलो में यह संभव नही हो सकता है l
डायनेमिक मैमोरी आलोकेशन इसकी मैमोरी को हीप में स्टोर करता है और स्टैटिक मैमोरी
अलोकेशन इसके डाटा को मैमोरी के डेटा सेगमेंट में स्टोर करता है l C language में
मैमोरी अलोकेशन और प्रबंधन के लिए कई फंक्शन होते है l यह फंक्शन <stdlib.h>
हेडर फाइल में होते है l
0 comments:
Post a Comment