C இல் இணைக்கப்பட்ட பட்டியல்: C இல் இணைக்கப்பட்ட பட்டியலை எவ்வாறு செயல்படுத்துவது?



சி இல் இணைக்கப்பட்ட பட்டியலில் உள்ள அவரது வலைப்பதிவு சி-யில் இணைக்கப்பட்ட பட்டியல் தரவு கட்டமைப்பை உங்களுக்கு அறிமுகப்படுத்துகிறது மற்றும் இணைக்கப்பட்ட பட்டியல் செயல்பாட்டை எடுத்துக்காட்டுகளுடன் விரிவாக புரிந்துகொள்ள உதவுகிறது.

வரிசைகளுக்குப் பிறகு, இரண்டாவது மிகவும் பிரபலமான தரவு அமைப்பு இணைக்கப்பட்ட பட்டியல். இணைக்கப்பட்ட பட்டியல் என்பது ஒரு நேரியல் தரவு கட்டமைப்பாகும், இது முனைகளின் சங்கிலியால் ஆனது, இதில் ஒவ்வொரு முனையும் ஒரு மதிப்பையும் சங்கிலியின் அடுத்த முனைக்கு ஒரு சுட்டிக்காட்டியையும் கொண்டுள்ளது. இந்த கட்டுரையில், சி இல் இணைக்கப்பட்ட பட்டியலை எவ்வாறு செயல்படுத்துவது என்று பார்ப்போம்.

சி இல் இணைக்கப்பட்ட பட்டியல் என்றால் என்ன?

ஒரு இணைக்கப்பட்ட பட்டியல் ஒரு நேரியல் தரவு அமைப்பு. இணைக்கப்பட்ட ஒவ்வொரு பட்டியலிலும் இரண்டு பகுதிகள் உள்ளன, தரவு பிரிவு மற்றும் பட்டியலில் அடுத்த உறுப்பு முகவரியை வைத்திருக்கும் முகவரி பிரிவு, இது ஒரு முனை என அழைக்கப்படுகிறது.





இணைக்கப்பட்ட பட்டியலின் அளவு சரி செய்யப்படவில்லை, மேலும் பட்டியலில் உள்ள எந்த இடத்திலும் தரவு உருப்படிகளைச் சேர்க்கலாம். குறைபாடு என்னவென்றால், ஒரு முனைக்குச் செல்ல, முதல் முனையிலிருந்து நமக்குத் தேவைப்படும் முனை வரை எல்லா வழிகளிலும் பயணிக்க வேண்டும். இணைக்கப்பட்ட பட்டியல் ஒரு வரிசை போன்றது, ஆனால் ஒரு வரிசை போலல்லாமல், இது நினைவகத்தில் தொடர்ச்சியாக சேமிக்கப்படவில்லை.

இணைக்கப்பட்ட பட்டியலின் மிகவும் பிரபலமான வகைகள்:



ஜாவாவில் ஒரு சக்தியை எண்ணை உயர்த்தவும்
  1. ஒற்றை இணைப்பு பட்டியல்
  2. இரட்டிப்பாக இணைப்பு பட்டியல்

இணைக்கப்பட்ட பட்டியலின் எடுத்துக்காட்டு

வடிவம்: [தரவு, முகவரி]

தலை -> [3,1000] -> [43,1001] -> [21,1002]



எடுத்துக்காட்டில், எண் 43 இடம் 1000 இல் உள்ளது மற்றும் முகவரி முந்தைய முனையில் உள்ளது. இணைக்கப்பட்ட பட்டியல் இவ்வாறு குறிப்பிடப்படுகிறது.

அடிப்படை இணைக்கப்பட்ட பட்டியல் செயல்பாடுகள்

சி இல் இணைக்கப்பட்ட பட்டியலில் பல செயல்பாடுகள் செயல்படுத்தப்படலாம். ஒரு எடுத்துக்காட்டு நிரலின் உதவியுடன் அவற்றைப் புரிந்துகொள்ள முயற்சிப்போம்.முதலில், நாங்கள் ஒரு பட்டியலை உருவாக்குகிறோம், அதைக் காண்பிப்போம், எந்த இடத்திலும் செருகுவோம், இருப்பிடத்தை நீக்குகிறோம். பட்டியலில் செயல்பாடுகளை எவ்வாறு செய்வது என்பதை பின்வரும் குறியீடு காண்பிக்கும்.

# அடங்கும் # அடங்கும் வெற்றிடத்தை உருவாக்கு () வெற்றிட காட்சி () வெற்றிடத்தை செருகும்_பெஜின் () வெற்றிட செருகும்_விவரம் () வெற்றிட செருகும்_போஸ் () வெற்றிட நீக்கு_பீஜின் () வெற்றிட நீக்கு_பிறப்பு () வெற்றிட நீக்கு_பொ () = NULL int main () {int தேர்வு போது (1) {printf ('n MENU n') printf ('n 1.Create n') printf ('n 2.Display n') printf ('n 3. இல் செருகவும் தொடக்க n ') printf (' n 4. இறுதியில் செருகவும் n ') printf (' n 5. குறிப்பிட்ட நிலையில் செருகவும் n ') printf (' n 6. தொடக்கத்தில் இருந்து நீக்கு n ') printf (' n 7. நீக்கு முடிவில் இருந்து n ') printf (' n 8. குறிப்பிட்ட நிலையில் இருந்து நீக்கு n ') printf (' n 9.Exit n ') printf (' n ----------------- --------------------- n ') printf (' உங்கள் விருப்பத்தை உள்ளிடுக: t ') scanf ('% d ', & தேர்வு) சுவிட்ச் (தேர்வு) {வழக்கு 1 . delete_pos () முறிவு வழக்கு 9: வெளியேறு (0) இயல்புநிலையை உடைத்தல்: printf ('n தவறான தேர்வு: n') முறிவு}} திரும்ப 0} voi d உருவாக்கு () {struct node * temp, * ptr temp = (struct node *) malloc (sizeof (struct node)) if (temp == NULL) {printf ('நினைவக இடத்தின் வெளியே: n') வெளியேறு (0) } printf ('n கணுக்கான தரவு மதிப்பை உள்ளிடுக: t') scanf ('% d', & temp-> info) temp-> next = NULL if (start == NULL) {start = temp} else {ptr = start (ptr-> next! = NULL) {ptr = ptr-> next} ptr-> next = temp}} void display () {struct node * ptr if (start == NULL) {printf ('nList காலியாக உள்ளது: n ') return} else {ptr = start printf (' n பட்டியல் கூறுகள்: n ') (ptr! = NULL) {printf ('% dt ', ptr-> info) ptr = ptr-> அடுத்த}}} void insert_begin () {struct node * temp temp = (struct node *) malloc (sizeof (struct node)) if (temp == NULL) {printf ('n நினைவு இடத்தின் வெளியே: n') திரும்ப} printf ('n உள்ளிடவும் கணுக்கான தரவு மதிப்பு: t ') scanf ('% d ', & temp-> info) temp-> next = NULL if (start == NULL) {start = temp} else {temp-> next = start start = temp temp} வெற்றிட செருக_செலுத்தல் () {struct முனை * தற்காலிக, * ptr temp = (struct node *) malloc (sizeof (struct node)) if (temp == NULL) {printf ('நினைவக இடத்தின் வெளியே: n') திரும்ப} ப rintf ('n கணுக்கான தரவு மதிப்பை உள்ளிடுக: t') scanf ('% d', & temp-> info) temp-> next = NULL if (start == NULL) {start = temp} else {ptr = while (ptr-> next! = NULL) {ptr = ptr-> next} ptr-> next = temp}} void insert_pos () {struct node * ptr, * temp int i, pos temp = (struct node *) malloc ( sizeof (struct node)) if (temp == NULL) {printf ('நினைவக இடத்தின் வெளியே: n') திரும்ப} printf ('n புதிய முனை செருகப்பட வேண்டிய நிலையை உள்ளிடுக: t') scanf ('% d' , & pos) printf ('n முனையின் தரவு மதிப்பை உள்ளிடுக: t') scanf ('% d', & temp-> info) temp-> next = NULL if (pos == 0) {temp-> next = start start (i = 0, ptr = startinext if (ptr == NULL) {printf ('n நிலை காணப்படவில்லை: [கவனமாகக் கையாளுங்கள்] n') திரும்ப}} temp-> next = ptr-> அடுத்த ptr -> next = temp}} void delete_begin () {struct node * ptr if (ptr == NULL) {printf ('n பட்டியல் காலியாக உள்ளது: n') திரும்ப} else {ptr = start start = start-> next printf (' n நீக்கப்பட்ட உறுப்பு:% dt ', ptr-> தகவல்) இலவசம் (ptr)}} void delete_end () {struct node * temp, * ptr if (start == NULL) {printf (' nList is ఖాళీ: ') வெளியேறு (0) } else if (start-> next == NULL) {ptr = start start = NULL printf ('n நீக்கப்பட்ட உறுப்பு:% dt', ptr-> தகவல்) இலவசம் (ptr)} else {ptr = தொடங்கும் போது (ptr- > அடுத்து! = NULL) {temp = ptr ptr = ptr-> அடுத்த} temp-> next = NULL printf ('n நீக்கப்பட்ட உறுப்பு:% dt', ptr-> தகவல்) இலவச (ptr)}} வெற்றிட நீக்கு_போஸ் () {int i, pos struct node * temp, * ptr if (start == NULL) {printf ('n பட்டியல் காலியாக உள்ளது: n') வெளியேறு (0)} else {printf ('n நீக்கப்பட வேண்டிய முனையின் நிலையை உள்ளிடவும் : t ') scanf ('% d ', & pos) if (pos == 0) {ptr = start start = start-> next printf (' n நீக்கப்பட்ட உறுப்பு:% dt ', ptr-> தகவல்) இலவசம் (ptr )} else {ptr = (i = 0inext if (ptr == NULL) {printf ('n நிலை காணப்படவில்லை: n') திரும்ப}} temp-> next = ptr-> அடுத்த printf ('n நீக்கப்பட்ட உறுப்பு: % dt ', ptr-> தகவல்) இலவசம் (ptr)}}}

இந்த குறியீட்டின் முதல் பகுதி ஒரு கட்டமைப்பை உருவாக்குகிறது. ஒரு இணைக்கப்பட்ட பட்டியல் அமைப்பு உருவாக்கப்பட்டது, இதனால் தரவு மற்றும் முகவரியை நமக்குத் தேவையானபடி வைத்திருக்க முடியும். கணு எவ்வாறு இருக்க வேண்டும் என்பதற்கான ஒரு கருத்தை தொகுப்பாளருக்கு வழங்குவதற்காக இது செய்யப்படுகிறது.

struct முனை {int தகவல் struct node * next}

கட்டமைப்பில், தரவை வைத்திருக்க தகவல் எனப்படும் தரவு மாறி மற்றும் முகவரியை சுட்டிக்காட்ட ஒரு சுட்டிக்காட்டி மாறி உள்ளது. இணைக்கப்பட்ட பட்டியலில் செய்யக்கூடிய பல்வேறு செயல்பாடுகள் உள்ளன:

  • உருவாக்கு ()
  • காட்சி ()
  • insert_begin ()
  • insert_end ()
  • ] insert_pos ()
  • delete_begin ()
  • delete_end ()
  • delete_pos ()

இந்த செயல்பாடுகளை மெனு இயக்கப்படும் முக்கிய செயல்பாடு அழைக்கிறது. முக்கிய செயல்பாட்டில், நிரலில் பயனர் என்ன செயல்பாட்டை செய்ய விரும்புகிறார் என்பதன் அடிப்படையில் பயனரிடமிருந்து உள்ளீட்டை எடுத்துக்கொள்கிறோம். உள்ளீடு பின்னர் சுவிட்ச் வழக்குக்கு அனுப்பப்பட்டு பயனர் உள்ளீட்டின் அடிப்படையில் அனுப்பப்படும்.

எந்த உள்ளீடு வழங்கப்பட்டதன் அடிப்படையில் செயல்பாடு அழைக்கப்படும். அடுத்து, தீர்க்கப்பட வேண்டிய வெவ்வேறு செயல்பாடுகள் எங்களிடம் உள்ளன. இந்த ஒவ்வொரு செயல்பாட்டையும் பார்ப்போம்.

செயல்பாட்டை உருவாக்கவும்

முதலில், இணைக்கப்பட்ட பட்டியலை உருவாக்க ஒரு உருவாக்கும் செயல்பாடு உள்ளது. இணைக்கப்பட்ட பட்டியல் உருவாக்கப்படும் அடிப்படை வழி இதுதான். குறியீட்டைப் பார்ப்போம்.

void create () {struct node * temp, * ptr printf ('n கணுக்கான தரவு மதிப்பை உள்ளிடுக: t') scanf ('% d', & temp-> info) temp-> next = NULL if (start == NULL ) {start = temp} else {ptr = தொடங்கும் போது (ptr-> next! = NULL) {ptr = ptr-> next} ptr-> next = temp}}

வெளியீடு

செருகு - இணைக்கப்பட்ட பட்டியல் - எடுரேகா

முதலில், இரண்டு சுட்டிகள் வகையை உருவாக்குகின்றன முனை, பி.டி.ஆர் மற்றும் தற்காலிக . இணைக்கப்பட்ட பட்டியலில் சேர்க்க வேண்டிய மதிப்பை பயனரிடமிருந்து எடுத்து, அதை தற்காலிக மாறியின் தகவல் பகுதியில் சேமித்து, அடுத்ததாக தற்காலிகமாக ஒதுக்குகிறோம், அது முகவரி பகுதியாக பூஜ்யமாக இருக்கும். பட்டியலின் தொடக்கத்தை வைத்திருக்கும் தொடக்க சுட்டிக்காட்டி உள்ளது. பட்டியலின் தொடக்கத்தை சரிபார்க்கிறோம். பட்டியலின் தொடக்கமானது பூஜ்யமாக இருந்தால், தொடக்க சுட்டிக்காட்டிக்கு தற்காலிகமாக ஒதுக்குகிறோம். இல்லையெனில், தரவு சேர்க்கப்பட்ட கடைசி இடத்திற்கு நாங்கள் பயணிக்கிறோம்.

இதற்காக, ptr க்கு தொடக்க மதிப்பை ஒதுக்கி, வரை பயணிக்கிறோம் ptr-> next = null . நாங்கள் ஒதுக்குகிறோம் ptr-> அடுத்து தற்காலிக முகவரி. இதேபோல், ஆரம்பத்தில் செருகுவதற்கும், இறுதியில் செருகுவதற்கும் ஒரு குறிப்பிட்ட இடத்தில் செருகுவதற்கும் குறியீடு கொடுக்கப்பட்டுள்ளது.

காட்சி செயல்பாடு

காட்சி செயல்பாட்டிற்கான குறியீடு இங்கே.

ஜாவாவில் நிமிட குவியலை செயல்படுத்தவும்
void display () {struct node * ptr if (start == NULL) {printf ('nList காலியாக உள்ளது: n') திரும்ப} else {ptr = start printf ('n பட்டியல் கூறுகள்: n') (ptr! = NULL) {printf ('% dt', ptr-> info) ptr = ptr-> அடுத்த}}}

வெளியீடு

காட்சி செயல்பாட்டில், பட்டியல் காலியாக இருக்கிறதா என்று முதலில் சரிபார்த்து, அது காலியாக இருந்தால் திரும்புவோம். அடுத்த பகுதியில், தொடக்க மதிப்பை ptr க்கு ஒதுக்குகிறோம். Ptr பூஜ்யமாக இருக்கும் வரை ஒரு சுழற்சியை இயக்கி, ஒவ்வொரு முனைக்கும் தரவு உறுப்பை அச்சிடுவோம், ptr பூஜ்யமாக இருக்கும் வரை, இது பட்டியலின் முடிவைக் குறிப்பிடுகிறது.

செயல்பாட்டை நீக்கு

இணைக்கப்பட்ட பட்டியலிலிருந்து ஒரு முனையை நீக்க குறியீட்டின் துணுக்கை இங்கே.

void delete_pos () {int i, pos struct node * temp, * ptr if (start == NULL) {printf ('n பட்டியல் காலியாக உள்ளது: n') வெளியேறு (0)} else {printf ('n இன் நிலையை உள்ளிடவும் நீக்க வேண்டிய முனை: t ') scanf ('% d ', & pos) if (pos == 0) {ptr = start start = start-> next printf (' n நீக்கப்பட்ட உறுப்பு:% dt ', ptr-> தகவல் ) இலவசம் (ptr)} else {ptr = (i = 0inext if (ptr == NULL) {printf ('n நிலை கிடைக்கவில்லை: n') திரும்ப}} temp-> next = ptr-> அடுத்த printf ('n நீக்கப்பட்ட உறுப்பு:% dt ', ptr-> தகவல்) இலவசம் (ptr)}}}

வெளியீடு

நீக்குதல் செயல்பாட்டில், பட்டியல் காலியாக இருக்கிறதா, ஆம் அது இருக்கிறதா என்று முதலில் சரிபார்க்கிறது. அது காலியாக இல்லாவிட்டால், அந்த நிலையை நீக்குமாறு பயனரைக் கேட்கிறது. பயனர் நிலைக்குள் நுழைந்ததும், அது முதல் நிலை என்பதை சரிபார்க்கிறது, ஆம் என்றால் அது ஒதுக்குகிறது ptr தொடங்க மற்றும் தொடக்க சுட்டிக்காட்டி அடுத்த இடத்திற்கு நகர்த்த மற்றும் ptr ஐ நீக்குகிறது. என்றால் நிலை பூஜ்ஜியம் அல்ல , பின்னர் அது பயனரால் உள்ளிடப்பட்ட மற்றும் எல்லா இடங்களிலும் 0 முதல் ஒரு சுழற்சியை இயக்கும் pos மாறி. உள்ளிட்ட நிலை இல்லையா என்பதை தீர்மானிக்க if அறிக்கை உள்ளது. என்றால் ptr பூஜ்யத்திற்கு சமம் , பின்னர் அது இல்லை.

நாங்கள் ptr ஐ தற்காலிகமாக ஒதுக்கவும் for loop இல், மற்றும் ptr பின்னர் அடுத்த பகுதிக்கு நகரும். இதற்குப் பிறகு நிலை காணப்படும் போது. இன் மதிப்பை வைத்திருக்க தற்காலிக மாறியை உருவாக்குகிறோம் ptr-> அடுத்து இதனால் ptr ஐ தவிர்க்கிறது. பின்னர் ptr நீக்கப்படும். இதேபோல், இது முதல் மற்றும் கடைசி உறுப்பு நீக்குதலுக்கும் செய்யப்படலாம்.

இரட்டிப்பாக இணைக்கப்பட்ட பட்டியல்

இரண்டு இருப்பதால் இது இரட்டிப்பாக இணைக்கப்பட்ட பட்டியல் என்று அழைக்கப்படுகிறது சுட்டிகள் , அடுத்த முனைக்கு ஒரு புள்ளி மற்றும் முந்தைய முனைக்கு மற்ற புள்ளிகள். இரட்டிப்பாக இணைக்கப்பட்ட செயல்பாடுகள் ஒற்றை இணைக்கப்பட்ட பட்டியலுக்கு ஒத்தவை. அடிப்படை செயல்பாடுகளுக்கான குறியீடு இங்கே.

# அடங்கும் # அடங்கும் (sizeof (struct Node)) if (TmpCell == NULL) printf ('நினைவகம் இடைவெளியில் இல்லை') வேறு {TmpCell-> e = x TmpCell-> முந்தைய = p TmpCell-> next = p-> அடுத்த p-> அடுத்தது = TmpCell}} வெற்றிடத்தை நீக்கு (int x, List l) osition p, p1, p2 p = (p! = NULL) if (p, = NULL) {p1 = p -> முந்தைய p2 = p -> அடுத்த p1 - > next = p -> next if (p2! = NULL) // முனை கடைசி முனை இல்லை என்றால் p2 -> முந்தைய = p -> முந்தைய} else printf ('உறுப்பு இல்லை !!! n')} வெற்றிடத்தை காட்சி (பட்டியல் l) {printf ('பட்டியல் உறுப்பு ::') நிலை p = l-> அடுத்ததாக (p! = NULL) {printf ('% d ->', p-> e) p = p- > அடுத்த}} int main () {int x, pos, ch, i List l, l1 l = (struct Node *) malloc (sizeof (struct Node)) l-> முந்தைய = NULL l-> அடுத்த = NULL பட்டியல் ப = l printf ('டபுள் லிங்க்ட் லிஸ்ட் எல் இன் எல் IST ADTnn ') {printf (' nn1. உருவாக்கவும் 2. நீக்கு 3. காட்சி 4. QUITnn தேர்வை உள்ளிடுக :: ') scanf ('% d ', & ch) சுவிட்ச் (ch) {வழக்கு 1: p = l printf (' செருக வேண்டிய உறுப்பை உள்ளிடுக :: ') scanf ('% d', & x) printf ('உறுப்பின் நிலையை உள்ளிடுக ::') ஸ்கேன்ஃப் ('% d', & pos) (i = 1 iஅடுத்த} செருக (x, l, p) முறிவு வழக்கு 2: p = l printf ('நீக்க வேண்டிய உறுப்பை உள்ளிடுக ::') scanf ('% d', & x) நீக்கு (x, p) முறிவு வழக்கு 3: காட்சி (எல்) உடைக்க}} போது (ச<4) } 

வெளியீடு

எனவே, நீங்கள் பார்க்க முடியும் என செயல்பாடுகள் கருத்து மிகவும் எளிது. இருமுறை இணைக்கப்பட்ட பட்டியல் சி நிரலாக்க மொழியில் ஒற்றை இணைக்கப்பட்ட பட்டியலின் செயல்பாடுகளைக் கொண்டுள்ளது. ஒரே வித்தியாசம் என்னவென்றால், வேறொரு முகவரி மாறி உள்ளது, இது இரட்டிப்பாக இணைக்கப்பட்ட பட்டியலில் பட்டியலை சிறப்பாக பயணிக்க உதவுகிறது.

சி இல் ஒற்றை மற்றும் இரட்டிப்பாக இணைக்கப்பட்ட பட்டியலில் அடிப்படை செயல்பாடுகளை எவ்வாறு செய்வது என்பதை நீங்கள் புரிந்து கொண்டீர்கள் என்று நம்புகிறேன்.

ஜாவாவில் இணைக்கப்பட்ட பட்டியலைக் கற்றுக்கொள்ள விரும்பினால், இங்கே ஒரு .

நீங்கள் ஏதேனும் கேள்விகளைக் கண்டால், 'சி-யில் இணைக்கப்பட்ட பட்டியல்' இன் கருத்துகள் பிரிவில் உங்கள் எல்லா கேள்விகளையும் கேட்க தயங்கவும், எங்கள் குழு பதிலளிப்பதில் மகிழ்ச்சி அடைகிறது.