İçeriği Paylaş:

Tek Bağlı Sıralı Doğrusal Listeden Düğüm Silme

1.2.1.    Tek Bağlı Sıralı Doğrusal Listeden Düğüm Silme

Önce  listeden çıkarılmak istenen eleman bulunur. Eğer silinecek eleman   listede   yoksa bu   durum   bir   mesaj ile   bildirilir.  Eleman bulunduğunda bağ  alanlarında  güncelleme yazılarak  eleman listeden silinir. Örneğimizdeki ‘C’ verisini silmek isteyelim.  ‘C’  elemanı bulunur ve  listede ‘C’ elemanını  gösteren  ‘B’  nin  bağ  alanına 4 yazılır(‘E’ nin adresi). Son işlemde de  ‘C’ nin  bağ alanına sıfır  yazmak gerekir. Liste başından itibaren sıralandığında ‘C’ listede yer almaz.Ekran AlıntısıÖrnek: Dışardan aldığı isimleri alfabetik sıra ile listeleyen, listeye yeni düğüm ekleyen, belirtilen düğümü silen ve düğümdeki en uzun isimi bulan programı yazınız.#include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h> struct listyapi{char   adi[21];struct listyapi *sonraki;};typedef struct listyapi listnode; //artık listyapi yerine listnode kullanılacaktypedef listnode *listptr; // *listptr listnode tipinde bir işaretçidir.listptr headnode;   /* Herzaman listenin basini gosterir */void seeklist(char *searchthis, listptr *prevnode)//listede arama yapar{listptr c;c = headnode;*prevnode = c;while ((c->sonraki != NULL)){c = c->sonraki;if (strcmp(c->adi, searchthis) >= 0) break;*prevnode = c;}}void kayit(char *s)/* prevnode kayidi newnode kayidini, newnode kayidi prevnode’nin daha once gosterdigi kayidini gosterir.*/{listptr newnode, prevnode;newnode = (listptr) malloc(sizeof(listnode)); /* yeni kayida yer a‡ */strcpy(newnode->adi, s);             /*bilgiyi yeni kayida yaz */seeklist(newnode->adi, &prevnode);   /* listedeki yerini bul */newnode->sonraki = prevnode->sonraki;   /* listeye ekle */prevnode->sonraki = newnode;}void iptal(char *s)/* newnode kayidi silinir. prevnode kayidi newnode kayidinin gosterdigi kayidini gosterir. */{listptr newnode, prevnode;seeklist(s, &prevnode);newnode = prevnode->sonraki;prevnode->sonraki = newnode->sonraki; free(newnode);}void listlist(void){listptr currentnode; currentnode = headnode;if (currentnode != NULL) currentnode = currentnode->sonraki;while (currentnode != NULL){printf(“%s  “,currentnode->adi); currentnode = currentnode->sonraki;}printf(“”);}void ebUz(void){int ln, cnt;listptr currentnode, findnode; currentnode = headnode;if (currentnode != NULL){currentnode = currentnode->sonraki; ln=0;cnt=0;}findnode=currentnode;while (currentnode != NULL){cnt++;if (strlen(currentnode->adi) >=strlen(findnode->adi)){findnode = currentnode; ln=cnt;}currentnode = currentnode->sonraki;}printf(“%s  %d  %d”,findnode->adi, ln, cnt); getch();}   /* En uzun isim; */ void main(){char      sec;char      *s;headnode = (listptr) malloc(sizeof(*headnode)); strcpy(headnode->adi,” listenin basi”); headnode->sonraki = NULL;do{system(“cls”); listlist();printf(“1 – Giris2 – iptal3 – En Uzunisim4 – SonSec :”); sec = getche(); switch (sec){case ‘1’: printf(“Adi :”);gets(s);kayit(s);break;case ‘2’: printf(“Adi “);gets(s);iptal(s);break;case ‘3’:ebUz();break;case ‘4’:exit(0);break;}}while (1);}

1.3. Çift Bağlı Sıralı Doğrusal Listeler

Bu veri yapısında tek bağlı sıralı doğrusal listeden farklı olarak önceki düğümün de adresini saklayan bir işaretçi bulunmasıdır. B sayede listede iki yönlü ilerleme yeteneği sağlanmış olur.Ekran Alıntısı

İçeriği Paylaş:
İlginizi Çekebilir
Yorum Yapılmamış

Henüz Hiç Yorum Yapılmadı..

Yorum Yaz

Tek Bağlı Sıralı Doğrusal Listeden Düğüm Silme

Programlama 2

27/07/2016 | Yorum Yok | 38 | kucukakarsu