Qn: Write a c program to remove the duplicates from an array without using any in-build function.
-By Madhavan, Last Update On 28th May,2019 01:12 pm

Duplicate Elements

ஒரு array-ல் ஒரே element ஒன்றுக்கும் மேற்பட்ட எண்ணிக்கையில் இருந்தால் அது duplicate element என்று கருதபடுகிறது. eg: int a[] = {2, 8, 3, 6, 3, 5, 7, 2, 6, 9, 2, 8}; இதில் 2,8,3,6 ஆகிய நான்கு element-களும் ஒன்றுக்கும் மேற்பட்ட எண்ணிக்கையில் repeat-ஆகியுள்ளது. ஆகையால் இவை duplicate elements என்று கருதபடுகிறது.

How to remove the duplicates

இதில் உள்ள repeated elements-ஐ எவ்வாறு remove செய்வது என்பதை விளக்குவதே இந்த program.

a என்ற array-ல் உள்ள element-களை repeat-ஆகின்றதா என்பதை ஒவொன்றாக check செய்து b என்ற array-ல் store செய்து கொள்கின்றோம். இந்த array b-ன் size ஆனது a-ன் size என்னவோ அதே size-ல் இருக்க வேண்டும். குறைவாக இருக்க கூடாது. ஏனெனில் a-என்ற array-ல் repeated element இல்லையெனில், a-ல் உள்ள அனைத்து element-களும் b-ல் store செய்யவேண்டும். ஆகையால் தான் size சமமாக இருக்க வேண்டும்.

count=0 அதாவது b என்ற array-ல் எதனை element-உள்ளது என்பதை இந்த count variable store செய்துகொண்ட இருக்கும். துவக்கதில் b-ல் எந்த element-ம் இல்லை என்பதால் count=0 என்று எடுத்துகொள்கிறோம்.

இப்பொழுது இரண்டு loop தேவைபடுகிறது. for(i=0;i<a.length;i++) இந்த loop, a-ல் உள்ள ஒவ்வொரு element-ஐயும் எடுப்பதற்கும். for(j=0;j<count;j++) இந்த loop, b-ல் உள்ள ஒவ்வொரு element-ஐயும் எடுப்பதற்கும் பயன்படுகிறது. இரண்டாவது loop-ன் உள்ளே, if(a[i]==b[j])-ல் அதாவது a-ல் எடுக்கப்பட்ட element a[i]-ம், b-ல் எடுக்கப்பட்ட element b[j]-ம் சமமாக உள்ளதா என்று சரிபர்க்க வேண்டும். அவ்வாறு சமமாக இருந்தால் இதுவே repeated element. ஆகையால் இந்த loop-ஐ break கொடுத்து அந்த element-ஐ skip செய்து விடவேண்டும்.

a-ல் ஒரு element-ஐ எடுத்து b-ல் உள்ள அனைத்து elements உடன் ஒப்பிட்டு பார்த்து அது பொருந்தவில்லை எனில் அது repeated(duplicate) element அல்ல. இபொழுது for(j=0;j<count;j++) loop முடியும் போது j-ன் value, count-ன் value-க்கு சமமாக மாறி இருக்கும். இந்த நிலையில் தான் if(j==count){ b[count]=a[i];} அதாவது, a-ல் உள்ள element-ஐ b-என்ற array-ல் சேர்க்கவேண்டும். இபொழுது count++ செய்யவேண்டும். ஏனெனில் b-ல் ஒரு element சேர்ந்துவிட்டது என்பதை குறிக்கும்.

இவை அனைத்தும் for(i=0;i<a.length;i++) இந்த loop-ற்கு உள்ளே தான் இருக்கவேண்டும். ஏனெனில் a-ல் உள்ள ஒவ்வொரு element-ஆக எடுத்து தான் மேற்கண்ட அனைத்தையும் செய்கின்றோம். இதேபோல் இந்த loop a-ல் உள்ள அனைத்து element-ஐயும் சுழற்சி முறையில் செய்துவிட்டு நின்றுவிடும்.

இப்பொழுது b-ல் unique elements. அதாவது repeat ஆகாத elements அனைத்தும் சேர்க்கபட்டு இருக்கும் இதை for loop-ஐ கொண்டு print செய்து கொள்ளவேண்டும்.

#include<stdio.h>
#include<conio.h>
int main(){
  int a[] = {2, 8, 3, 6, 3, 5, 7, 2, 6, 9, 2, 8};
  int length=sizeof(a)/sizeof(int);
  int b[length];
  int count = 0, i, j;
  for (i = 0; i < length; i++) {
      for (j = 0; j < count; j++) {
          if (a[i] == b[j]) {
              break;
          }
      }
      if (j == count) {
          b[count] = a[i];
          count++;
      }
  }
  printf("\nArray after removing duplicate elements:");
  for (i = 0; i < count; i++) {
      printf(" %d ",b[i]);
  }
return 0;
}
Output:
Array after removing duplicate elements:
2 8 3 6 5 7 9

Pgcomments

Comments