إزالة عنصر من مجموعة ديناميكية هي واحدة من المهام الهامة عند البرمجة في اللغة ج. تسمح لك المصفوفة الديناميكية بتغيير حجمها أثناء تنفيذ البرنامج ، والتي يمكن أن تكون مفيدة جدا عند العمل مع البيانات الكبيرة أو عندما تحتاج إلى إضافة العناصر وإزالتها ديناميكيا.
هناك عدة طرق لإزالة عنصر من مصفوفة ديناميكية في لغة البرمجة سي. واحدة من أسهل الطرق هي استخدام مصفوفة مساعدة. عند حذف عنصر من المصفوفة الأصلية ، يتم تحويل جميع العناصر بعد العنصر المحذوف إلى موضع واحد إلى اليسار. ثم يتم إنشاء مصفوفة أصغر جديدة ، يتم فيها نسخ جميع العناصر باستثناء العناصر المحذوفة.
هناك طريقة أخرى لإزالة عنصر من مصفوفة ديناميكية في ج وهي استخدام وظيفة إعادة التوزيع. ريالوك يسمح لك بتغيير حجم كتلة الذاكرة المخصصة للصفيف. لحذف عنصر من مصفوفة ، تحتاج إلى تقليل حجم المصفوفة بواسطة خلية واحدة ونسخ جميع العناصر باستثناء العنصر المحذوف إلى منطقة ذاكرة جديدة. ومع ذلك ، عند استخدام ريالوك ، نضع في اعتبارنا الحاجة إلى التحقق من قيمة الإرجاع من وظيفة فارغة من أجل تجنب تسرب الذاكرة أو أخطاء أخرى.
- تحديد مصفوفة ديناميكية في لغة البرمجة سي
- إنشاء مصفوفة باستخدام مالوك
- تهيئة مصفوفة ديناميكية في ج
- إزالة عنصر من مصفوفة ديناميكية
تحديد مصفوفة ديناميكية في لغة البرمجة سي
.
بناء الجملة لتحديد مصفوفة ديناميكية:
النوع * اسم المصفوفة = (النوع*) مالوك (الحجم * الحجم (النوع));
أين:
- - نوع بيانات عناصر المصفوفة
- - اسم المتغير الذي سيتم تخزين العناوين
- - عدد العناصر التي سيتم تخصيصها للمصفوفة
.
مثال على تحديد واستخدام مصفوفة ديناميكية:
# تشمل
# تشمل
كثافة العمليات الرئيسية () {
إنت * أرقام = (إنت *)مالوك (5 * حجم (إنت));
إذا (أرقام== لاغية) {
برينتف ("خطأ! فشل في تخصيص الذاكرة للمصفوفة.");
عودة -1;
}
إلى عن على (كثافة العمليات أنا = 0; أنا < 5; أنا i) {
أرقام [أنا] = أنا + 1;
}
برينتف ("عناصر المصفوفة:");
إلى عن على (كثافة العمليات أنا = 0; أنا < 5; أنا i) {
برينتف ("٪د " ، أرقام [أنا]);
}
مجانا (أرقام);
العودة 0;
}
.
تحديد مجموعة ديناميكية في لغة البرمجة ج هو مفهوم مهم يسمح للمبرمج بإدارة الذاكرة بكفاءة وإنشاء صفائف ذات حجم متغير أثناء تنفيذ البرنامج.
إنشاء مصفوفة باستخدام مالوك
في لغة البرمجة سي ، يمكنك استخدام وظيفة مالوك () لإنشاء مصفوفة ديناميكية. وظيفة مالوك () تخصص كتلة من الذاكرة من الحجم المطلوب وإرجاع مؤشر إلى بداية هذه الكتلة.
النموذج الأولي لوظيفة مالوك() :
باطل * مالوك (الحجم);
تأخذ وظيفة مالوك () وسيطة واحدة-الحجم بالبايت الذي يجب تخصيصه للمصفوفة. قيمة الإرجاع للوظيفة هي مؤشر إلى كتلة الذاكرة المخصصة. إذا فشل تخصيص الذاكرة (على سبيل المثال ، بسبب نقص الذاكرة) ، ترجع الدالة فارغة.
مثال على استخدام وظيفة مالوك () لإنشاء صفيف:
- كثافة العمليات * صفيف;
- كثافة العمليات الحجم = 5;
- صفيف = (كثافة العمليات*) مالوك (حجم * حجم (كثافة العمليات));
- إذا (صفيف = = لاغية) {
- برينتف ("خطأ في تخصيص الذاكرة");
- العودة 0;
- }
- // الآن مجموعة صفيف يحتوي على 5 عناصر كثافة العمليات
في هذا المثال ، ونحن على خلق مؤشر صفيف من نوع كثافة العمليات. ثم نخصص الذاكرة لمجموعة من 5 عناصر إنت باستخدام وظيفة مالوك (). يقوم عامل الحجم (إنت) بإرجاع حجم نوع إنت بالبايت ، لذلك نضربه في حجم الصفيف (5) للحصول على الحجم الإجمالي للذاكرة التي يجب تخصيصها.
ثم نتحقق مما إذا تم تخصيص الذاكرة (إذا عادت وظيفة مالوك() فارغة) ، وفي حالة الفشل ، نقوم بإخراج رسالة خطأ وإنهاء البرنامج.
الآن مجموعة صفيف يحتوي على 5 عناصر كثافة العمليات ، ويمكننا العمل معها بنفس الطريقة كما هو الحال مع مجموعة العادية.
تهيئة مصفوفة ديناميكية في ج
في لغة البرمجة ج ، عند العمل مع المصفوفات الديناميكية ، التهيئة هي عملية مهمة وضرورية. تتيح لك التهيئة المناسبة تخصيص ذاكرة كافية لصفيف وتعبئته بالقيم الافتراضية أو القيم المطلوبة.
لتهيئة مصفوفة ديناميكية في ج ، اتبع الخطوات التالية:
- تخصيص الذاكرة لمجموعة باستخدام وظيفة مالوك أو كالوك.
- تحقق من نجاح تخصيص الذاكرة.
- املأ المصفوفة بالقيم الافتراضية أو القيم المطلوبة.
مثال على تهيئة مصفوفة ديناميكية باستخدام دالة مالوك:
# تشمل
# تشمل
كثافة العمليات الرئيسية () {
حجم كثافة العمليات;
كثافة العمليات * صفيف;
برينتف ("أدخل حجم المصفوفة:");
المسح الضوئي ("٪د " ، والحجم);
// تخصيص الذاكرة للمصفوفة
صفيف = (كثافة العمليات*) مالوك (حجم * حجم (كثافة العمليات));
إذا (صفيف = = لاغية) {
برينتف ("خطأ في تخصيص الذاكرة.
");
عودة 1;
}
// ملء المصفوفة بالقيم
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
صفيف [أنا] = أنا + 1;
}
// إخراج الصفيف
برينتف ("صفيف:");
ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {
برينتف ("٪د " ، صفيف [أنا]);
}
// تحرير الذاكرة
مجانا (صفيف);
العودة 0;
}
مثال على تهيئة مصفوفة ديناميكية باستخدام وظيفة كالوك:
# تشمل
# تشمل
كثافة العمليات الرئيسية () {
حجم كثافة العمليات;
كثافة العمليات * صفيف;
برينتف ("أدخل حجم المصفوفة:");
scanf("%d", &size);
// Выделение памяти для массива
array = (int*) calloc(size, sizeof(int));
if (array == NULL) {
printf("Ошибка выделения памяти.
");
return 1;
}
// Заполнение массива значениями
int value = 1;
for (int i = 0; i < size; i++) {
array[i] = value;
value += 2;
}
// Вывод массива
printf("Массив: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
// Освобождение памяти
free(array);
return 0;
}
عند تهيئة مصفوفة ديناميكية ، من المهم مراعاة أنه بعد استخدام المصفوفة ، من الضروري تحرير الذاكرة المخصصة باستخدام الوظيفة المجانية. هذا يسمح لك لتجنب تسرب الذاكرة وتحسين كفاءة البرنامج.
إزالة عنصر من مصفوفة ديناميكية
تتم إزالة عنصر من مصفوفة ديناميكية في لغة البرمجة ج عن طريق تحويل جميع العناصر اللاحقة إلى موضع واحد إلى اليسار. للقيام بذلك ، اتبع الخطوات التالية:
- ابحث عن فهرس العنصر المراد حذفه.
- انقل جميع العناصر بعد العنصر المحذوف في موضع واحد إلى اليسار.
- تقليل حجم الصفيف من جانب واحد.
في اللغة ج ، لا توجد وظيفة قياسية لإزالة عنصر من صفيف ، لذلك سيكون عليك تنفيذ هذه العملية بنفسك.
لنلق نظرة على مثال رمز يوضح إزالة عنصر من مصفوفة ديناميكية: