Documente Academic
Documente Profesional
Documente Cultură
Toate operaţiile de inserare a unui nod într-o listă presupun întâi alocarea dinamică a
memoriei pentru nodul ce urmează să se insereze. În cazul în care avem câmpuri de tip şir de
caractere declarate ca şi pointer la char, trebuie alocată memorie şi pentru ele. Pentru alocare
se utilizează funcţia malloc.
nod *p=(nod*)malloc(sizeof(nod));
strcpy(p->nume,”Ionel”);
p->grupa=1.2;
p->urm=NULL;
nodurile aflate înaintea sa în înlanţuire şi pornind de la primul element al listei. Dacă lista este
vidă primul element indică spre NULL.
p->urm=prim;
prim=p;
prim
p
prim
urm urm NULL
urm
Figura 11.2 – Inserarea la început
p->urm=NULL;
if(prim==NULL )
prim=p;
else
{
q=prim;
while(q->urm!=NULL)
q=q->urm;
q->urm=p;
}
prim q p
2
Programarea Calculatoarelor Capitolul 11 – Liste simplu înlanţuite
3
Programarea Calculatoarelor Capitolul 11 – Liste simplu înlanţuite
q=prim;
while(q->urm!=NULL && strcmp(q->urm->nume,nume)!=0)
q=q->urm;
if(q->urm!=NULL && strcmp(q->urm->nume,nume)==0)
{
p=q->urm;
q->urm=q->urm->urm;/*stergerea unui nod din
interiorul listei sau de la sfarsit*/
free(p);
}
return prim;
}
else
{
printf(“\nLista vida!”);
return prim;
}
}
prim q
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
4
Programarea Calculatoarelor Capitolul 11 – Liste simplu înlanţuite
p=(nod*)malloc(sizeof(nod));
p->nume=(char*)malloc(strlen(nume)+1);
strcpy(p->nume,nume);
p->grupa=grupa;
p->urm=NULL;
if(p==NULL || p->nume==NULL)
{
printf("Eroare la alocare!");
exit(0);
}
if(prim==NULL)
return p;
else
if(strcmp(prim->nume,p->nume)>0)
{
p->urm=prim;
return p;
}
else
{
q=prim;
while(q->urm!=NULL && strcmp(q->urm->nume,p->nume)<0)
q=q->urm;
p->urm=q->urm;
q->urm=p;
return prim;
}
}
5
Programarea Calculatoarelor Capitolul 11 – Liste simplu înlanţuite
if(prim!=NULL)
{
if(strcmp(prim->nume,nume)==0)
{
q=prim;
prim=prim->urm;
free(q->nume);
free(q);
return prim;
}
q=prim;
while(q->urm!=NULL && strcmp(q->urm->nume,nume)!=0)
q=q->urm;
if(q->urm!=NULL && strcmp(q->urm->nume,nume)==0)
{
p=q->urm;
q->urm=q->urm->urm;
free(p->nume);
free(p);
}
return prim;
}
else
return prim;
}
int main(){
int opt;
nod *prim,*p;
char nume[10];
float grupa;
prim=NULL;
while(1){
clrscr();
printf("\n1. Introducerea unui student");
printf("\n2. Afisarea alfabetica a studentilor
introdusi");
printf("\n3. Cautarea unui student");
printf("\n4. Stergerea unui student");
printf("\n5. Iesire\n");
scanf("%d",&opt);
fflush(stdin);
switch(opt)
{
case 1:printf("Numele:");
gets(nume);
printf("Grupa:");
scanf("%f",&grupa);
prim=adauga(prim,nume,grupa);
break;
case 2:afisare(prim);
break;
case 3:printf("Introduceti numele studentului
6
Programarea Calculatoarelor Capitolul 11 – Liste simplu înlanţuite
cautat:");
gets(nume);
p=cautare(prim,nume);
if(p==NULL)
printf("Studentul nu se gaseste in
lista!");
else
printf("%s %.1f",p->nume,p->grupa);
break;
case 4:printf("Introduceti numele
studentului:");
gets(nume);
prim=stergere(prim,nume);
afisare(prim);
break;
case 5:exit(1);
default:printf("\n1..5!");
}
getch();
}
return 0;
}