प्रौद्योगिकी साझेदारी

ग भाषा - संरचना

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. संरचनानां परिभाषां कृत्वा उपयोगं कुर्वन्तु

१.१ अवलोकनम्

पूर्वं वयं दृष्टाः दत्तांशप्रकाराः, यथा int, float, char इत्यादयः, तेषां उपयोगः केवलं प्रोग्रामेषु भवति यदि वयं स्वस्य आवश्यकतानुसारं किञ्चित् जटिलं दत्तांशं निर्मातुम् इच्छामः तर्हि अस्माभिः संरचनानां उपयोगः करणीयः ।

यथा, छात्रस्य छात्रसङ्ख्या, नाम, लिंगं, आयुः इत्यादयः एकस्यैव छात्रस्य सन्ति, परन्तु एते चराः भिन्नप्रकारस्य सन्ति यदि भवान् केवलं सरलपरिभाषां कर्तुं भिन्नचरानाम् उपयोगं करोति तर्हि तेषां मध्ये सम्बन्धं प्रतिबिम्बयितुं कठिनम् अस्ति .अन्तर्सम्बन्धः । ततः वयं एकं चरं निर्मामः यत् एतान् दत्तांशं संयोजयित्वा चरे स्थापयितुं शक्नोति, येन तस्य उपयोगः बहु सरलः भवति ।

  1. 结构体类型:
  2.         struct Student
  3.         {
  4.               int num;//学号为整形;
  5.               char name[20];//姓名为字符串;
  6.               char sex;//性别为字符型;
  7.               int age;//年龄为整形
  8.               float score;//成绩为浮点型
  9. char addr[30];//地址为字符型;
  10. }

इत्यस्मिन्‌:

struct छात्रः एकः संरचनाप्रकारः अस्ति;

struct इति कीवर्डः यः संरचनाप्रकारं घोषयति ।

छात्रः इति संरचनायाः नाम, अन्येभ्यः संरचनाभ्यः भेदं कर्तुं;

कुञ्चितब्रेस् मध्ये संरचनायाः सदस्याः सन्ति समूहः एकत्र सदस्यसूची इति उच्यते, तस्य नामकरणं च चरानाम् नामकरणेन सह सङ्गतम् अस्ति

नोटः - संरचनाप्रकारेषु बहुविधाः भवितुम् अर्हन्ति यथा: struct Student;

संरचनायाः सदस्याः अन्यस्य संरचनायाः प्रकारः अपि भवितुम् अर्हन्ति;

struct Date

{        

int मासः;

int दिवसः;

int वर्ष;

};

struct Student

{

int num;

चार नाम[20];

चार लिंग;

int age;

struct जन्मदिवसस्य तिथिः;

चार अद्द्र्[30];

}

१.२ संरचनाचरानाम् परिभाषा

पूर्वं वयं केवलं संरचनाप्रकारं परिभाषितवन्तः, यत् मॉडलस्य समकक्षं भवति, चरं च न परिभाषितवन्तः तदनन्तरं वयं संरचनाचरं परिभाषयामः तेषु विशिष्टदत्तांशं संगृह्णामः, 3 पद्धतयः

विधिः १: प्रथमं संरचनाप्रकारं घोषयन्तु, ततः संरचनाचराः परिभाषयन्तु

पूर्वसंरचनाप्रकारस्य आधारेण struct Student, संरचनाचराः परिभाषयन्तु;

struct छात्रः छात्रः1,छात्रः2;

इयं पद्धतिः int a,b इत्यस्य सदृशी अस्ति केवलं पूर्वापेक्षा अस्ति यत् पूर्वमेव संरचनाप्रकारः अस्ति, तथा च संरचनाचरः प्रकारस्य आधारेण परिभाषितः भवति

    विधिः २: प्रकारं घोषयन्ते सति चराः परिभाषयन्तु

आवेदनपत्रं:

struct संरचना नाम

                {

सदस्यसूची;

}चरनामसूची;

उदाहरण:

struct Student
                {
int num;
चार नाम[20];
चार लिंग;
int age;
float score;
चार अद्ध्र[30];
}छात्र१,छात्र२;

      विधिः ३: प्रकारनाम निर्दिष्टं विना संरचनाप्रकारचरं प्रत्यक्षतया परिभाषयन्तु

आवेदनपत्रं:

struct

                        {

सदस्यचराः;

}चरनामसूची;

अयं अनामिकः संरचनाप्रकारः अस्ति, सामान्यतया न प्रयुक्तः;

नोटः 1. संरचनाचरानाम् सदस्यनामानि कार्यक्रमे चरनामानां समानानि भवितुम् अर्हन्ति;

2. संरचनाचरानाम् सदस्यानां उपयोगः एकः एव कर्तुं शक्यते तेषां स्थितिः कार्यं च साधारणचरानाम् समकक्षं भवति;

१.३ संरचनाचरानाम् आरम्भः सन्दर्भः च

संरचनाचराः परिभाषयन्ते सति तेषां आरम्भं कुर्वन्तु;

      उदाहरण:छात्रस्य सूचनां (छात्रसङ्ख्या, नाम, लिंगं, पता च सहितम्) संरचनाचरमध्ये स्थापयन्तु, ततः छात्रस्य सूचनां निर्गमयन्तु;

  1. #include <stdio.h>
  2. int main()
  3. {
  4. struct Student
  5. {
  6. int num;
  7. char name[20];
  8. char sex;
  9. char addr[20];
  10. }student1 = {101,"Li li",'M',"123XiAn"};
  11. printf("NO:%d,nname:%snssex:%cnaddress:%sn",student1.num,student1.name,student1.sex,student1.addr);
  12. return 0;

परिणामविश्लेषणम् : १.

संरचनाचरं परिभाषयन्ते सति, तस्य सदस्यान् वैसे आरभतयन्तु आरभतसूची कुञ्चितकङ्कणेषु निबद्धानां स्थिरांकानां संख्या भवति टिप्पणी: एतत् संरचनाचरस्य आरम्भीकरणम् अस्ति, न the structure.शरीरप्रकारस्य आरम्भीकरणं।

संरचनाचरस्य सदस्यस्य मूल्यं, सन्दर्भविधिः अस्ति :

संरचना चर नाम।सदस्य नाम

छात्र१.नाम

      संरचनासदस्यानां कृते ये अन्यसंरचनाप्रकारस्य सन्ति, निम्नस्तरीयसदस्याः स्तरं स्तरं द्रष्टव्याः उदाहरणार्थं, उपरि उल्लिखिते struct Student मध्ये struct Date birthday अस्ति

छात्र जन्मदिन।मास

समानप्रकारस्य संरचनाः परस्परं नियुक्तुं शक्यन्ते : १.छात्रः1= छात्रः2;

        उदाहरण:द्वयोः छात्रयोः छात्र-परिचयः, नाम, ग्रेड् च प्रविष्ट्वा, उच्चतरश्रेणीयुक्तस्य छात्रस्य छात्र-परिचयः, नाम, ग्रेड् च निर्गच्छतु;

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main()
  4. {
  5. struct Student
  6. {
  7. int num;
  8. char name[20];
  9. float score;
  10. }student1,student2;
  11. scanf("%d%s%f", &student1.num, student1.name, &student1.score);
  12. scanf("%d%s%f", &student2.num, student2.name, &student2.score);
  13. printf("The higher score is:n");
  14. if (student1.score > student2.score)
  15. {
  16. printf("%d %s %6.2fn", student1.num, student1.name, student1.score);
  17. }
  18. else if (student1.score < student2.score)
  19. {
  20. printf("%d %s %6.2fn", student2.num, student2.name, student2.score);
  21. }
  22. else
  23. {
  24. printf("%d %s %6.2fn", student1.num, student1.name, student1.score);
  25. printf("%d %s %6.2fn", student2.num, student2.name, student2.score);
  26. }
  27. }

संरचनाचरानाम् निवेशनार्थं scanf फंक्शन् इत्यस्य उपयोगं कुर्वन्, भवान् तान् पृथक् निवेशयितुं scanf फंक्शन् मध्ये सर्वेषां सदस्यानां मूल्यानि एकदा एव निवेशयितुं न शक्नोति of student1.name, यतः सरणीनाम मूलतः Got इति पतां प्रतिनिधियति ।

2. structure array इत्यस्य उपयोगं कुर्वन्तु

2.1 संरचना सरणी परिभाषयन्तु

यदा वयं पूर्वं संरचनाचराः परिभाषितवन्तः तदा एकैकं परिभाषितवन्तः तथापि यदि एतत् सम्बन्धितदत्तांशसमूहः अस्ति यस्य कार्ये भागं ग्रहीतुं आवश्यकं भवति तर्हि स्पष्टतया दत्तांशस्य उपयोगः आवश्यकः, यथा १० छात्राणां सूचना is the structure array , संरचना सरणीयाः प्रत्येकं सरणीतत्त्वं संरचना अस्ति ।

यथा : त्रयः अभ्यर्थिनः सन्ति, प्रत्येकं मतदाता केवलं एकस्य व्यक्तिस्य कृते मतदानं कर्तुं शक्नोति प्रथमं अभ्यर्थिनः नाम प्रविष्टुं, अन्ते च प्रत्येकस्य व्यक्तिस्य मतदानस्य परिणामं प्रदर्शयितुं आवश्यकम्।

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. struct Person
  5. {
  6. char name[20];
  7. int count;
  8. }leader[3] = { "wang", 0, "zhang", 0, "li", 0 };
  9. int main()
  10. {
  11. int i, j;
  12. char lead_name[20];
  13. for (i = 0; i < 10; i++)
  14. {
  15. scanf("%s", lead_name);
  16. for (j = 0; j < 3; j++)
  17. {
  18. if (strcmp(lead_name, leader[j].name) == 0)
  19. leader[j].count++;
  20. }
  21. }
  22. printf("nResultn");
  23. for (i = 0; i < 3; i++)
  24. {
  25. printf("name:%s,count:%dn", leader[i].name, leader[i].count);
  26. }
  27. return 0;
  28. }

संरचनासरण्याः सामान्यरूपं परिभाषयन्तु : १.

        struct संरचना नाम

        {

चरसूची

} सरणी नाम [सरणी लंबाई];

वा

प्रथमं संरचनाप्रकारं घोषयन्तु, यथा: struct student, ततः structure array परिभाषयन्तु;

        संरचना प्रकार सरणी नाम [सरणी लंबाई];

संरचनासरण्याः आरम्भस्य रूपं परिभाषायाः अनन्तरं योजयितुं भवति :

      ={प्रारम्भिक मूल्यसूची};     

२.२ संरचनासरण्याः उपयोगः

        उदाहरण:n छात्राणां विषये सूचना अस्ति (छात्रस्य परिचयः, नाम, ग्रेड् च समाविष्टाः), तथा च प्रत्येकस्य छात्रस्य सूचनां ग्रेडक्रमेण निर्गन्तुम् आवश्यकम् अस्ति;

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. struct Student
  5. {
  6. int num;
  7. char name[20];
  8. float score;
  9. };
  10. int main()
  11. {
  12. struct Student stu[5] = { 1001, "Wangwei", 98.25, 1002, "Liuliu", 91, 1003, "Zhangli", 98, 1004, "Xiaozhao", 85, 1005, "Baibai", 94 };
  13. struct Student temp;
  14. printf("The order id:n");
  15. int i, j,k;
  16. for (i = 0; i < 4; i++)
  17. {
  18. k = i;
  19. for (j = i + 1; j < 5; j++)
  20. {
  21. if (stu[j].score>stu[k].score)
  22. {
  23. k = j;
  24. }
  25. }
  26. temp = stu[k];
  27. stu[k] = stu[i];
  28. stu[i] = temp;
  29. }
  30. for (i = 0; i < 5; i++)
  31. {
  32. printf("%d %s %5.2f", stu[i].num, stu[i].name, stu[i].score);
  33. printf("n");
  34. }
  35. return 0;
  36. }

3. संरचना सूचकः

३.१ संरचनाचरानाम् सूचकाः

तथाकथितः संरचनासूचकः संरचनाचरस्य सूचकः भवति संरचनाचरस्य आरम्भिकसङ्केतः संरचनाचरस्य सूचकः भवति ।

संरचनावस्तुं प्रति सूचयति सूचकचरः संरचनाचरं वा संरचनासरण्याः तत्त्वं वा सूचयितुं शक्नोति सूचकचरस्य आधारप्रकारः संरचनाचरस्य प्रकारस्य समानः भवितुमर्हति

यथा : struct Student * pt;

उदाहरण:संरचनाचरं प्रति सूचयन्त्याः सूचकचरस्य माध्यमेन संरचनाचरस्य सदस्यानां सूचनां आउटपुट् कुर्वन्तु;

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. struct Student
  5. {
  6. long num;
  7. char name[20];
  8. char sex;
  9. float score;
  10. };
  11. int main()
  12. {
  13. struct Student stu1;
  14. struct Student *pt;
  15. pt = &stu1;
  16. stu1.num = 10001;
  17. strcpy(stu1.name, "Lili");
  18. stu1.sex = 'M';
  19. stu1.score = 96.5;
  20. printf("No:%dnname:%snsex:%cnscore:%5.1fn", stu1.num, stu1.name, stu1.sex, stu1.score);
  21. printf("n");
  22. printf("No:%dnname:%snsex:%cnscore:%5.1fn", (*pt).num, (*pt).name, (*pt).sex, (*pt).score);
  23. printf("n");
  24. printf("No:%dnname:%snsex:%cnscore:%5.1fn", pt->num, pt->name, pt->sex, pt->score);
  25. return 0;
  26. }

परिणामविश्लेषणम् : १.

फंक्शन् मध्ये प्रथमं printf फंक्शन् structure variable name stu1 इत्यस्य माध्यमेन सदस्यान् अभिगच्छति;

द्वितीयं printf फंक्शन् संरचनाचरं प्रति सूचयन्त्याः सूचकचरस्य माध्यमेन स्वसदस्यान् अभिगच्छति (*pt) सूचितं संरचनाचरं प्रतिनिधियति, तथा च (*pt).num सूचितं संरचनासदस्यं प्रतिनिधियति ।

तदतिरिक्तं C भाषायां (*pt).num इत्यस्य स्थाने pt-&gt;num इति स्थापनस्य अनुमतिः अस्ति;

३.२ संरचना सरणीं प्रति सूचकः

संरचना सरणीयाः तत्त्वान् दर्शयितुं सूचकचरानाम् उपयोगः कर्तुं शक्यते ।

उदाहरण:तत्र त्रयः छात्राणां सूचनाः सन्ति, संरचनासरण्यां स्थापिताः, छात्रस्य सूचना च आउटपुट् आवश्यकी भवति;

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. struct Student
  5. {
  6. long num;
  7. char name[20];
  8. char sex;
  9. float score;
  10. };
  11. int main()
  12. {
  13. struct Student stu[3] = { 1001, "wangle", 'M', 95, 1002, "chengcai", 'M', 99.9, 1003, "shangmin", 'F', 85.2 };
  14. struct Student *pt;
  15. printf("No. name sex scoren");
  16. for (pt = stu; pt < stu + 3; pt++)
  17. {
  18. printf("%d %s %c %5.2fn", pt->num, pt->name, pt->sex, pt->score);
  19. }
  20. return 0;
  21. }

प्रोग्राम् मध्ये pt struct Student type structure variable इत्यस्य सूचकः भवति, न तु pt=stu[1].name इत्यस्य कस्यचित् सदस्यस्य कृते structure variable अपरः च structure member variable अस्ति । p++, p इत्यस्य मूल्येन संरचनायाः दीर्घता वर्धते ।

3.3 संरचनाचरानाम्, सूचकानाम् च उपयोगं कृत्वा संरचनाचरानाम् उपयोगं कार्यमापदण्डरूपेण कुर्वन्तु

संरचनाचरस्य मूल्यं फंक्शन् प्रति पारयितुं त्रयः उपायाः सन्ति;

1. संरचनाचरानाम् सदस्यानां मापदण्डरूपेण उपयोगं कुर्वन्तु एषा पद्धतिः साधारणचरानाम् उत्तीर्णतायाः समकक्षं भवति यत् औपचारिकं वास्तविकं च मापदण्डं (संरचनासदस्याः) समानः भवति

2. संरचनाचरानाम् उपयोगं वास्तविकमापदण्डरूपेण कुर्वन्तु। यदा संरचनाचरस्य उपयोगः वास्तविकपैरामीटर्रूपेण भवति तदा सः मूल्येन अपि पारितः भवति ।

3. संरचनाचरस्य (array) पतां औपचारिकपैरामीटर् प्रति पारयितुं संरचनाचरस्य (array) सूचकस्य उपयोगं वास्तविकपैरामीटर्रूपेण कुर्वन्तु ।

उदाहरण:

अत्र n संरचनानि सन्ति, यत्र छात्राणां छात्रपरिचयपत्राणि, नामानि, ३ पाठ्यक्रमेषु ग्रेड्स् च सन्ति । .

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. void print(struct Student stud);
  5. struct Student Max(struct Student stu[]);
  6. void input(struct Student stu[]);
  7. struct Student
  8. {
  9. int num;
  10. char name[20];
  11. float score[3];
  12. float aver;
  13. };
  14. int main()
  15. {
  16. struct Student stu[3], *pt;
  17. pt = stu;
  18. input(pt);
  19. print(Max(pt));
  20. return 0;
  21. }
  22. void input(struct Student stu[])
  23. {
  24. int i;
  25. printf("请输入各学生的信息:学号、姓名、3门成绩:n");
  26. for (i = 0; i < 3;i++)
  27. {
  28. scanf("%d%s%f%f%f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
  29. stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
  30. }
  31. }
  32. struct Student Max(struct Student stu[])
  33. {
  34. int i, m = 0;
  35. for (i = 0; i < 3; i++)
  36. {
  37. if (stu[i].aver > stu[m].aver)
  38. m = i;
  39. }
  40. return stu[m];
  41. }
  42. void print(struct Student stud)
  43. {
  44. printf("成绩最好的学生是:n");
  45. printf("学号:%d 姓名:%s 三门课程:%5.2f %5.2f %5.2f平均成绩:%5.2fn", stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);
  46. }

1. इनपुट् फंक्शन् आह्वयति समये वास्तविकः पैरामीटर् सूचकचरः pt भवति, औपचारिकः पैरामीटर् च संरचना सरणी अस्ति यत् पारितं भवति तत् संरचनातत्त्वस्य आरम्भिकसङ्केतः, तथा च फंक्शन् इत्यस्य रिटर्न् मूल्यं नास्ति

2. Max फंक्शन् आह्वयति समये वास्तविकः पैरामीटर् सूचकचरः pt भवति, औपचारिकः पैरामीटर् स्ट्रक्चर एरे भवति, स्ट्रक्चर एलिमेण्ट् इत्यस्य आरम्भिकसङ्केतः पारितः भवति, तथा च फंक्शन् रिटर्न् वैल्यू स्ट्रक्चर टाइप् डाटा भवति

3. मुद्रणफलकं आह्वयति समये वास्तविकमापदण्डाः संरचनाचराः (संरचना सरणीतत्त्वानि) भवन्ति, औपचारिकमापदण्डाः च संरचनाचराः भवन्ति यत् पारितं भवति तत् संरचनाचरस्य प्रत्येकस्य सदस्यस्य मूल्यं भवति, तथा च कार्यस्य प्रतिगमनमूल्यं नास्ति

4. लिङ्क् कृतसूची

४.१ अवलोकनम्

लिङ्क्ड् सूची एकः सामान्यः दत्तांशसंरचना अस्ति, या गतिशीलभण्डारणविनियोगस्य संरचना अस्ति ।

सरणीयां दत्तांशसञ्चयने सति सरणीदीर्घता (बहुसरणयः) पूर्वमेव परिभाषिता भवितुमर्हति यदि केषुचित् वर्गेषु १०० छात्राः सन्ति तथा च केषुचित् वर्गेषु ३० छात्राः सन्ति, यदि एकमेव सरणीं भिन्नवर्गेषु छात्राणां दत्तांशसञ्चयनाय उपयुज्यते तर्हि तत् must be defined.100 दीर्घतायुक्तः सरणी, परन्तु एतेन प्रायः संसाधनानाम् अपव्ययः भवति ।

लिङ्क् कृतसूचिकायां "head pointer" चरः भवति, यः चित्रे head इत्यनेन प्रतिनिधित्वं करोति, यः एकं पतां संगृह्णाति यत् लिङ्क्ड् सूचीयां प्रत्येकं तत्त्वं "node" इति उच्यते, तथा च प्रत्येकं नोड् मध्ये द्वौ भागौ समाविष्टौ भवितुमर्हति:

1. उपयोक्तृभिः आवश्यकः वास्तविकदत्तांशः;

2. अग्रिमतत्त्वस्य सम्बोधनम्;

स्मृतौ लिङ्क् कृतसूचौ प्रत्येकस्य तत्त्वस्य पत्तनानि विच्छिन्नानि भवितुम् अर्हन्ति इति दृश्यते . यदि "शिरः सूचकः" न प्रदत्तः तर्हि सम्पूर्णा लिङ्क् कृता सूची दुर्गमः भवति ।

अस्मिन् सन्दर्भे, लिङ्क्ड् सूचीं निर्मातुं संरचनायाः उपयोगः सर्वाधिकं समीचीनः भवति संरचनायां अनेकाः सदस्याः सन्ति, तथा च अग्रिमस्य नोड् इत्यस्य पतां संग्रहीतुं सूचकप्रकारस्य सदस्यानां उपयोगः भवति ।

struct Student

        {

int num;

int स्कोरः;

struct छात्र *अगला;

        }

तेषु num, score इत्येतयोः उपयोगः उपयोक्तृदत्तांशस्य संग्रहणार्थं भवति, next च अग्रिमस्य नोड् इत्यस्य पतां संग्रहीतुं भवति ।

४.२ स्थिरलिङ्क् कृतसूची

विषय:

एकं स्थिरं लिङ्क्ड् सूचीं रचयन्तु, यत्र त्रयाणां छात्राणां दत्तांशैः सह नोड् युक्तं भवति, तथा च प्रत्येकस्य नोड् इत्यस्य दत्तांशं आउटपुट् भवितुं आवश्यकम्;

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. struct Student
  4. {
  5. int num;
  6. float score;
  7. struct Student * next;
  8. };
  9. int main()
  10. {
  11. struct Student a, b, c, *head, *p;
  12. a.num = 1001; a.score = 85.5;
  13. b.num = 1002; b.score = 95.5;
  14. c.num = 1003; c.score = 84.5;
  15. head = &a;
  16. a.next = &b;
  17. b.next = &c;
  18. c.next = NULL;
  19. p = head;
  20. do
  21. {
  22. printf("%d %5.2fn", p->num, p->score);
  23. p = p->next;
  24. } while (p != NULL);
  25. return 0;
  26. }

यथा, एकं लिङ्क्ड् सूचीं रचयन्तु येन head नोड् a, a.next नोड् b, b.next नोड c, c.next च null सूचयति एतेन लिङ्क्ड् सूचीसम्बन्धः निर्मीयते ।

लिङ्क्ड् लिस्ट् आउटपुट् करणसमये प्रथमं p इत्यस्य उपयोगः करणीयः, p इत्यस्य बिन्दुः a इत्यस्य कृते करणीयः, ततः p=p-&gt;next इत्यत्र दत्तांशं आउटपुट् करणीयः ।

४.३ गतिशीललिङ्कितसूची

४.३.१ गतिशीलस्मृतिविनियोगः

गतिशीललिङ्क्ड् सूचीनां विषये वक्तुं पूर्वं प्रथमं भवद्भ्यः गतिशीलस्मृतिविनियोगस्य परिचयं कुर्मः ।

पूर्वं वयं उक्तवन्तः यत् चराः वैश्विकचराः विभक्ताः सन्ति तथा च स्थानीयचराः स्मृतिस्य स्थिरभण्डारणक्षेत्रे आवंटिताः भवन्ति स्मृतिः एतत् भण्डारणक्षेत्रम् इति उच्यतेस्त्राव

तदतिरिक्तं, C भाषा गतिशीलस्मृतिविनियोगक्षेत्राणां स्थापनां अपि करोति यत् एते दत्तांशाः आवश्यकतायां उद्घाटिताः भवन्ति, यदा आवश्यकता नास्ति तदा मुक्ताः भवन्तिराशः

स्मृतेः गतिशीलं आवंटनं प्रणाल्या प्रदत्तानां कार्याणां माध्यमेन प्राप्तं भवति: malloc, calloc, free तथा realloc कार्याणि ।

1. गतिशीलं भण्डारणक्षेत्रं उद्घाटयितुं malloc फंक्शन् इत्यस्य उपयोगं कुर्वन्तु

नियोग: void * malloc (अनहस्ताक्षरित int आकार);

नियोग:

        स्मृतेः गतिशीलभण्डारणक्षेत्रे लम्बताकारस्य (एकक: बाइट्) निरन्तरस्थानं आवंटयन्तु ।

return value: 1.1.

प्रथमस्य आवंटितस्य बाइट्-सङ्केतेः कोऽपि प्रकारः नास्ति, केवलं साधारणः पतयः अस्ति;

2. गतिशीलं भण्डारणक्षेत्रं उद्घाटयितुं calloc फंक्शन् इत्यस्य उपयोगं कुर्वन्तु

नियोग:शून्य * calloc (अनहस्ताक्षरित एन, अहस्ताक्षरित आकार);

नियोग:

स्मृतेः गतिशीलभण्डारणक्षेत्रे आकारस्य दीर्घतायाः सह निरन्तरस्थानस्य n बाइट् आवंटयन्तु । इदं स्थानं तुल्यकालिकरूपेण पर्याप्तं विशालं भवति यत् सरणीं रक्षितुं शक्नोति;

एक-आयामी-सरण्याः कृते गतिशील-भण्डारणस्थानं उद्घाटयितुं calloc-कार्यस्य उपयोगं कुर्वन्तु, n इति सरणी-तत्त्वानां संख्या, आकारः च तत्त्वस्य दीर्घता ।

return value: 1.1.

प्रथमस्य आवंटितस्य बाइट्-सङ्केतेः कोऽपि प्रकारः नास्ति, केवलं साधारणः पतयः अस्ति;

3. गतिशीलभण्डारणक्षेत्रं पुनः आवंटयितुं realloc फंक्शन् इत्यस्य उपयोगं कुर्वन्तु

नियोग:void * realloc (शून्य * पी ,अनहस्ताक्षरित int आकार);

नियोग:

आवंटितं गतिशीलस्मृतिं पुनः आवंटयन्तु।

p द्वारा सूचितस्य गतिशीलस्थानस्य आकारं आकारे परिवर्तयितुं recalloc फंक्शन् इत्यस्य उपयोगं कुर्वन्तु । p इत्यस्य मूल्यं अपरिवर्तितं तिष्ठति;

return value: 1.1.

अद्यतनीकरणानन्तरं गतिशीलस्मृतेः प्रथमस्य बाइट्-सङ्केतः मूलतः p.

4. गतिशीलभण्डारणक्षेत्रं मुक्तुं मुक्तकार्यस्य उपयोगं कुर्वन्तु

नियोग: शून्य मुक्त (शून्य * पी);

नियोग:

सूचकचर p द्वारा सूचितं गतिशीलस्थानं मुक्तं कुर्वन्तु येन स्थानस्य एषः भागः अन्यैः चरैः उपयोक्तुं शक्यते ।

p malloc तथा calloc फंक्शन् इत्येतयोः नवीनतम-कॉल-तः प्राप्तं रिटर्न्-मूल्यं भवति;

return value: 1.1.

न कश्चित्;

टीका: उपर्युक्तचतुर्णां फंक्शन्स् इत्यस्य घोषणाः सर्वे stdlib.h हेडर् सञ्चिकायां सन्ति ।

void सूचक प्रकारः : १.

उपर्युक्तफंक्शन् malloc function तथा calloc function इत्येतयोः return values ​​इत्येतयोः द्वयोः अपि void * type भवति, यस्य अर्थः अस्ति यत् एतत् कस्यापि प्रकारस्य data इत्यस्य कृते न सूचयति इति न अवगच्छन्तु, अपितु empty type इत्यस्य कृते सूचयति अथवा कस्यचित् प्रकारस्य दत्तांशं न दर्शयति।

गतिशीलस्मृतिः आह्वयति सति, कार्यक्रमः केवलं कार्येण पुनः आनयितस्य शुद्धसङ्केतस्य उपयोगं करोति, तथा च कस्य दत्तांशप्रकारस्य उपयोगं कर्तुम् इच्छति तर्हि एतत् परिवर्तनीयम्

उदाहरणतया:

int *पः .

p = (int *) malloc (100);

विषय:

एकं गतिशीलं दत्तांशं रचयन्तु, 5 छात्राणां स्कोरं निवेशयन्तु, तथा च 60 बिन्दुभ्यः न्यूनाः छात्राः सन्ति वा इति परीक्षितुं कार्यस्य उपयोगं कुर्वन्तु, अयोग्याङ्कान् निर्गन्तुं च

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. void check(int * p);
  7. int *p1, i;
  8. p1 = (int *)malloc(5 * sizeof(int));
  9. for (i = 0; i < 5; i++)
  10. {
  11. scanf("%d", p1 + i);
  12. }
  13. check(p1);
  14. return 0;
  15. }
  16. void check(int * p)
  17. {
  18. int i;
  19. printf("they are fail:n");
  20. for (i = 0; i < 5; i++)
  21. {
  22. if (*(p+i) < 60)
  23. printf("%d ", *(p + i));
  24. }
  25. }

संचालन परिणाम : १.

परिणामविश्लेषणम् : १.

कार्यक्रमे कोऽपि सरणी परिभाषितः नास्ति, परन्तु सरणीरूपेण उपयोगाय गतिशीलं मुक्तविनियोगक्षेत्रं उद्घाटितम् अस्ति ।

malloc फंक्शन् मध्ये, डायनामिक स्पेस आवंटनार्थं कोऽपि विशिष्टः मूल्यः प्रत्यक्षतया पारितः नास्ति प्रथमं बाइट्-सङ्केतं दर्शयितुं int प्रकारं प्रति परिवर्तयितुं च p इत्यस्य उपयोगं कुर्वन्तु, p+1 च अग्रिम-तत्त्वं प्रति सूचयति ।

४.३.२ गतिशीललिङ्क्ड् सूचीयाः निर्माणम्

4 छात्राणां कृते आँकडाभिः सह गतिशीलं लिङ्क्ड् सूचीं निर्मातुं एकं फंक्शन् लिखन्तु।

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define LEN sizeof(struct Student)
  5. struct Student
  6. {
  7. long num;
  8. float score;
  9. struct Student * next;
  10. };
  11. int n;
  12. struct Student * creat(void)
  13. {
  14. struct Student * head, *p1, *p2;
  15. n = 0; p1 = p2 = malloc(LEN);
  16. scanf("%ld%f", &p1->num, &p1->score);
  17. head = NULL;
  18. while (p1->num != 0)
  19. {
  20. n = n + 1;
  21. if (n == 1)
  22. head = p1;
  23. else p2->next = p1;
  24. p2 = p1;
  25. p1 = (struct Student *)malloc(LEN);
  26. scanf("%ld%f", &p1->num, &p1->score);
  27. }
  28. p2->next = NULL;
  29. return (head);
  30. }
  31. int main()
  32. {
  33. struct Student * pt;
  34. pt = creat();
  35. printf("n num:%ld score:%5.2fn", pt->num, pt->score);
  36. return 0;
  37. }

संचालन परिणाम : १.

परिणामविश्लेषणम्: गतिशीललिङ्क्ड् सूचीं निर्मातुं प्रथमं त्रयः संरचनासूचकाः निर्दिष्टाः भवन्ति, ततः malloc फंक्शन् इत्यस्य उपयोगः नोड् इत्यस्य निर्माणार्थं भवति, ततः त्रयः अपि स्ट्रक्चर सूचकाः अस्य नोड् इत्यस्य निर्माणार्थं कुर्वन्ति, ततः p1 नोड इत्यस्य निर्माणार्थं malloc फंक्शन् इत्यस्य उपयोगं करोति Next निर्मितं नोडं प्रति सूचयति p2=p1 इत्यस्मै इंगितस्य अनन्तरं p2 रचयति अग्रिमः निर्मितं नोडं प्रति सूचयति, p2=p1....यावत् p1 इत्यस्मिन् तत्त्वस्य मूल्यं 0 न भवति newly created node.

गतिशीललिङ्क्ड् सूचीयाः निवेशः निर्गमः च : १.

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define LEN sizeof(struct Student)
  5. struct Student
  6. {
  7. long num;
  8. float score;
  9. struct Student * next;
  10. };
  11. int n;
  12. struct Student * creat(void)
  13. {
  14. struct Student * head, *p1, *p2;
  15. head = NULL;
  16. n = 0;
  17. p2 = p1 = malloc(LEN);
  18. scanf("%ld%f", &p1->num, &p1->score);
  19. while (p1->num != 0)
  20. {
  21. n = n + 1;
  22. if (n == 1)
  23. head = p1;
  24. else
  25. p2->next = p1;
  26. p2 = p1;
  27. p1 = malloc(LEN);
  28. scanf("%ld %f", &p1->num, &p1->score);
  29. }
  30. p2->next = NULL;
  31. return head;
  32. }
  33. void print(struct Student * p)
  34. {
  35. do
  36. {
  37. printf("%ld %5.2fn", p->num ,p->score);
  38. p=p->next;
  39. } while (p->num != NULL);
  40. }
  41. int main(void)
  42. {
  43. struct Student * pt;
  44. pt = creat();
  45. print(pt);
  46. return 0;
  47. }

संचालन परिणाम : १.

5. संघप्रकारः

५.१ अवलोकनम्

कदाचित्, भवान् स्मृति-एकके भिन्न-प्रकारस्य चरानाम् संग्रहणं कर्तुम् इच्छति उदाहरणार्थं, एकस्मिन् एव पते आरभ्यमाणे स्मृति-एकके पूर्णाङ्क-चराः, प्लवमान-बिन्दु-चराः च स्थापयन्तु .स्मृतिसंरचनायाः कश्चन खण्डः "संयोगः" इति उच्यते ।

संयोगस्य सामान्यरूपं परिभाषयतु : १.

संघ संघ नाम

        {

सदस्यसूची;

}चरसूची;

उदाहरणतया:

union Data

        {

int i;

चार छ;

float f;

}क,ख,ग;

संरचनाचरेन कब्जिता स्मृतिदीर्घता प्रत्येकेन सदस्येन कब्जितस्मृतिदीर्घतायाः योगः भवति यदा तु संघेन आकृष्टा स्मृतिदीर्घता दीर्घतमस्य सदस्यस्य दीर्घता भवति

५.२ उद्धरणम्

केवलं पूर्वं परिभाषिताः संघचराः एव सन्दर्भितुं शक्यन्ते ध्यानं कुर्वन्तु यत् वयं संघचरानाम् सन्दर्भं न दद्मः अपितु सन्दर्भितसङ्घचरानाम् सदस्यान् सन्दर्भयामः ।

ai इति संघचरस्य पूर्णाङ्कचरं निर्दिशति;

a.ch इति union चर मध्ये वर्णचरं निर्दिशति;

af इति संघचरस्य वास्तविकचरं निर्दिशति;

५.३ विशेषताः

1. स्मृतिखण्डस्य उपयोगेन अनेकविधसदस्यानां संग्रहणं कर्तुं शक्यते, परन्तु तेषु एकैकं क्षणं संग्रहीतुं शक्यते, न तु एकस्मिन् समये अनेकाः ।

2. संघचराः आरम्भं कर्तुं शक्यन्ते, परन्तु आरम्भसारणीयां केवलं एकः नित्यः भवितुम् अर्हति ।

3. संघचरस्य सदस्यः गतवारं नियुक्तः सदस्यः भवति, पूर्वमूलचरं च अधिलिखितं प्रतिस्थापितं च भवति ।

4. संघचरस्य पता तस्य सदस्यानां पता समानः भवति ।

5. भवन्तः union variable name इत्यस्य मूल्यं नियुक्तुं न शक्नुवन्ति, न च मूल्यं प्राप्तुं चरनाम सन्दर्भयितुं प्रयतन्ते ।

6. गणनाप्रकारः

यदि केषाञ्चन चरानाम् केवलं कतिपयानि सम्भाव्यमूल्यानि सन्ति तर्हि ते गणनाप्रकाररूपेण परिभाषितुं शक्यन्ते तथाकथितं गणना सम्भाव्यमूल्यानां एकैकं सूचीकरणम् अस्ति;

गणनाप्रकारस्य घोषणं enum इत्यनेन आरभ्यते उदाहरणार्थम्;

eunm सप्ताहदिवस{सूर्य,सोम,मंगल,बुध,थु,फ्री,सत};

उपरिष्टात् enum Weekday इति गणनाप्रकारं घोषयति । ततः एतत् प्रकारस्य उपयोगेन चरानाम् परिभाषा कर्तुं शक्यते ।

enum सप्ताहदिवसस्य कार्यदिवसः,सप्ताहस्य समाप्तेः;

तेषु कार्यदिवसः सप्ताहान्तः च गणनाचररूपेण परिभाषिताः सन्ति, तथा च कुञ्चितकोष्ठकाः गणनातत्त्वानि अथवा गणनानित्यः इति उच्यन्ते ।

गणनाप्रकारस्य घोषणस्य सामान्यरूपम् : १.

enum [गणना नाम] {गणना तत्व सूची};

उदाहरण:

जेबस्य मध्ये ५ प्रकाराः कन्दुकाः सन्ति : रक्तः, पीतः, नीलः, श्वेतः, कृष्णः च प्रत्येकं समये पुटतः ३ कन्दुकाः बहिः निष्कास्य भिन्नवर्णानां ३ गोलकाः प्राप्तुं सम्भाव्यमार्गान् पृच्छन्तु

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main()
  4. {
  5. enum Color {red,yellow,bule,white,black};
  6. enum Color i, j, k, pri;
  7. int n, loop;
  8. n = 0;
  9. for (i = red; i <= black; i++)
  10. for (j = red; j <= black; j++)
  11. if (i != j)
  12. {
  13. for (k = red; k <= black; k++)
  14. if ((k != i) && (k != j))
  15. {
  16. n++;
  17. printf("%d ", n);
  18. for (loop = 1; loop <= 3; loop++)
  19. {
  20. switch (loop)
  21. {
  22. case 1:pri = i; break;
  23. case 2:pri = j; break;
  24. case 3:pri = k; break;
  25. default:break;
  26. }
  27. switch (pri)
  28. {
  29. case red:printf("%s ", "red"); break;
  30. case yellow:printf("%s ", "yellow"); break;
  31. case bule:printf("%s ", "bule"); break;
  32. case white:printf("%s ", "white"); break;
  33. case black:printf("%s ", "black"); break;
  34. default:break;
  35. }
  36. }
  37. printf("n");
  38. }
  39. }
  40. printf("n total:%dn", n);
  41. return 0;
  42. }

संचालन परिणाम : १.

7. नूतनं प्रकारनाम घोषयितुं typedef इत्यस्य उपयोगं कुर्वन्तु

विद्यमानस्य प्रकारनामस्य स्थाने नूतनं प्रकारनाम निर्दिष्टुं typedef इत्यस्य उपयोगं कुर्वन्तु;

1. केवलं मूलप्रकारनामस्य स्थाने नूतनप्रकारनाम स्थापयन्तु ।

उदाहरणतया:

typedef int पूर्णाङ्कः;

typedef float वास्तविक;

एवं निम्नलिखितपङ्क्तिद्वयं तुल्यम् ।

int i,j;——— पूर्णांक i,j;

2. जटिलप्रकारप्रतिपादनविधेः स्थाने सरलप्रकारनाम नामकरोतु

  संरचनाप्रकारस्य प्रतिनिधित्वार्थं नूतनप्रकारस्य नाम नामकरोतु:

typedef struct इति प्रकारः

        {

int मुन्;

                ......

} दत्तांश;

ततः चरं परिभाषितुं नूतनप्रकारस्य नाम Data इत्यस्य उपयोगं कुर्वन्तु;

Data brithday;

दत्तांश * प;

      सरणीप्रकारस्य स्थाने नूतनप्रकारस्य नाम नामकरोतु:

typedef int संख्या [100];

नुम् अ;

      सूचकप्रकारस्य प्रतिनिधित्वार्थं नूतनप्रकारस्य नाम नामकरोतु

typedef char * स्ट्रिंग;

स्ट्रिंग प,क [10];

      फंक्शन् प्रति सूचकं प्रतिनिधितुं नूतनं प्रकारनाम नामकरोतु;

typedef int (* सूचक) ();

सूचक p1,p2;

           सारांशः : चरपरिभाषायाः मार्गानुसारं चरनामस्य स्थाने नूतनप्रकारनाम स्थापयन्तु, अग्रे typedef योजयित्वा नूतनप्रकारनाम मूलप्रकारस्य प्रतिनिधित्वं करोति इति घोषयन्तु

typetef केवलं विद्यमानप्रकारस्य कृते नूतनं प्रकारनाम निर्दिशति, परन्तु नूतनं प्रकारं न निर्माति ।

typetef तथा #define इत्येतयोः उपरितनसादृश्यं भवति ।

typedef int गणना

#define गणना int

तेषां कार्यं int इत्यस्य स्थाने Count इत्यस्य उपयोगः भवति, परन्तु वस्तुतः ते भिन्नाः सन्ति #define इत्येतत् पूर्व-संकलने संसाधितं भवति, केवलं सरल-स्ट्रिंग्-प्रतिस्थापनरूपेण तस्य उपयोगः कर्तुं शक्यते, यदा typedef इत्येतत् संकलन-पदे संसाधितं भवति । वस्तुतः सरलं प्रतिस्थापनं न भवति। तस्य स्थाने नूतनं प्रकारनाम उत्पद्यते, चरः परिभाषितः भवति ।