Sunteți pe pagina 1din 7

Lucrare de laborator

la disciplina
Structuri de Date și Algoritmi
Lucrare de laborator nr. 2:

Tema:
Implementarea tipului de date abstract “Listă simplu înlățuită” în limbajul C.

Scopul lucrării
Scopul lucrării este de a familiariza studentul cu mecanismul de creare a listeleor
simplu înlățuite și operații elementare asupra acestuia, utilizînd pentru aceasta limbajul
C.
Problema

1. Să se elaboreze un program ce va aloca dinamic o listă simplu înlățuită de


structuri și va realiza următoarele funcții, unde funcțiile date reprezintă
opțiuni organizate într-un meniu în cadrul programului:
- citirea de la tastatură a elementelor listei;
- afișarea la consolă a elementelor listei;
- inserarea unui element nou la capătul listei;
- inserarea unui element nou la începutul listei;
- insearea unui element la o poziție X (introdusă de la tastatură) în cadrul listei;
- ștergerea unui element de pe o poziție X ( introdusă de la tastatură) din cadrul
listei;
- curățirea listei.

Rezultatul
Rezultaul lucrării se va plasa într-un raport, unde va fi inclusă foaia de titlu și
codul sursă a programului cu o poză de execuție a acestuia.
#include <stdio.h>

struct node
{
int data;
struct node* next;
};

struct node* Start;

struct node* yeniDugum(int data)


{
struct node* dugum = (struct node*)malloc(sizeof(struct node));
dugum->data = data;
dugum->next = NULL;
return(dugum);
}

void traverseList()
{
printf("\n");
struct node* temp = Start;
while(temp != NULL)
{
printf(" %d ", temp->data);
temp = temp->next;
}
}

void sonaElemanEkle(int data)


{
struct node* eklenecekDugum = yeniDugum(data);
if(Start == NULL)
{
Start = eklenecekDugum;
return;
}
else
{
struct node* temp = Start;
while(temp->next != NULL)
temp = temp->next;
temp->next = eklenecekDugum;
}

void basaEkle(int data)


{
struct node* eklenecekDugum = yeniDugum(data);
if(Start == NULL)
Start = eklenecekDugum;
else
{
struct node* temp = Start;
Start = eklenecekDugum;
Start->next = temp;
}
}

void arayaElemanEkle(int eklenecekData, int onuneEklenecekData)


{
struct node* eklenecekDugum = yeniDugum(eklenecekData);
if(Start == NULL)
basaEkle(eklenecekData);
else
{
struct node* temp = Start;
while(temp->data != onuneEklenecekData)
{
temp = temp->next;
}
if(temp->next == NULL)
sonaElemanEkle(eklenecekData);
else
{
struct node* sonrakiEleman = temp->next;
temp->next = eklenecekDugum;
eklenecekDugum->next = sonrakiEleman;
}
}
}

void sondanSil()
{
if(Start == NULL)
return;
if(Start != NULL && Start->next == NULL)
Start = NULL;
else
{
struct node* temp = Start;
while(temp->next->next != NULL)
temp = temp->next;
free(temp->next);
temp->next = NULL;
}
}

void bastanSil()
{
if(Start == NULL)
return;
if(Start->next == NULL)
Start = NULL;
else
{
struct node* ikinciDugum = Start->next;
Start = ikinciDugum;
}
}

void aradanElemanSil(int data)


{
if(Start == NULL)
return;
if(Start->next == NULL && Start->data == data)
{
Start = NULL;
}

else
{
if(Start->data == data)
{
bastanSil();
return;
}
struct node* temp = Start;
while(temp->next->data != data && temp != NULL)
temp = temp->next;

if(temp->next->next == NULL && temp->next->data == data)


sondanSil();
else
{
struct node* silinecekEleman = temp->next;
struct node* baglanacakEleman = silinecekEleman->next;
temp->next = baglanacakEleman;
free(silinecekEleman);
}
}
}

void Menu()
{
int secim, deger, pozisyon;
printf("\n1- Liste Olustur Kac Tane / Create list - Include
Numbers...");
printf("\n2- Listeyi Goster / Show List");
printf("\n3- Sona Eleman Ekle / Adding an Element to the End");
printf("\n4- Basa Eleman Ekle / Adding Elements to the Base");
printf("\n5- Araya Eleman Ekle / Inserting Elements");
printf("\n6- Sondan Eleman Sil / Delete Penultimate Element");
printf("\n7- Bastan Eleman Sil / Delete Element from the
Start");
printf("\n8- Aradan Eleman Sil / Delete Intermediate Element");
printf("\n9- Tumunu Sil / Delete All");

printf("\nYapmak istediginiz islemi Secin.... ");


scanf("%d", &secim);
int eleman;
switch(secim)
{
case 1:

printf("Kac tane eleman olucak ?");


scanf("%d", &eleman);
for(int i=0; i<eleman; i++) {
scanf("%d",°er);
sonaElemanEkle(deger);
}
case 2:
traverseList();
break;
case 3:
printf("\nEklemek istediginiz sayiyi girin... ");
scanf("%d", °er);
sonaElemanEkle(deger);
break;
case 4:
printf("\nEklemek istediginiz sayiyi girin... ");
scanf("%d", °er);
basaEkle(deger);
break;
case 5:
printf("\nEklemek istediginiz sayiyi girin... ");
scanf("%d", °er);
traverseList();
printf("\nHangi elemanin onune eklemek istiyorsunuz?...
");
scanf("%d", &pozisyon);
arayaElemanEkle(deger,pozisyon);
break;
case 6:
sondanSil();
break;
case 7:
bastanSil();
break;
case 8:
printf("\nHangi Elemani Silmek istiyorsunuz... ");
scanf("%d", °er);
aradanElemanSil(deger);
break;
case 9:
free(Start);
Start=NULL;

}
}

int main()
{
while(1)
Menu();
}

S-ar putea să vă placă și