Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Stiva
Stiva este un caz special de lista liniara in care intrarile si iesirile se fac la un singur capat al ei.
Exemple de stive de obiecte sunt oarecum evidente: stive de lemne, de lazi, de baloti de paie, de farfurii, de dosare etc. Structura de stiva presupune, conform definitiei, o anumita disciplina: totdeauna se adauga un obiect 'deasupra' ultimului depus si se extrage totdeauna ultimul obiect adaugat. Se spune ca accesul la o stiva este de tip LIFO (Last In - First Out).
Modul de lucru cu stiva impune cunoasterea in permanenta a pozitiei elementului din varful ei. In programul care implementeaza static stiva, Static_Stiva, variabila varf reprezinta pozitia pe care se poate introduce un element (varf-1 este pozitia ultimului element introdus), iar in varianta dinamica (programul Dinamic_Stiva) varf este adresa ultimului element introdus. Grafic, cele doua variante de implementare se pot reprezenta astfel:
Variante de implementare a stivei |
|
|
|
a) varianta statica |
b) varianta dinamica |
Doua operatii sunt esentiale in lucrul cu stiva: adaugarea unui element si extragerea unui element din stiva.
Lista programului Static_Stiva (implementarea statica) este prezentata in continuare.
//Static_Stiva
# include 'stdio.h'
# include 'conio.h'
const max_aloc=20;
int stiva[max_aloc];
char ch;
int x,varf;
void InitStiva()
int AdaugaEl(int x)
else
return 0;
int ExtragEl(int x)
void Listare()
void main(void)
break;
case 'E':
k=ExtragEl(x);
if (k)
else
break;
case 'L':
Listare();
break;
case 'S':
break;
default:
printf('nIntroduceti alta litera!');
getch();
}
clrscr();
}
while (ch!='S');
Lista programului Dinamic_Stiva (implementarea dinamica) este prezentata mai jos.
//Dinamic_Stiva
# include 'stdio.h'
# include 'conio.h'
# include 'alloc.h'
const max_aloc=50;
struct pstruct
;
typedef struct pstruct PSTRUCT;
PSTRUCT *varf,*p;
int x,n;
char ch;
void InitStiva()
int AdaugaEl(int x)
else
return 0;
int ExtragEl(int x)
void Listare()
getch();
void main(void)
break;
case 'E':
k=ExtragEl(x);
if (k)
else
break;
case 'L':
Listare();
break;
case 'S':
break;
default:
printf('nIntroduceti alta litera!');
getch();
}
clrscr();
}
while (ch!='S');
|
Nota: Programele ilustrative Static_Stiva si Dinamic_Stiva contin procedurile pentru efectuarea acestor operatii (AdaugaEl si ExtrageEl) si in plus codificarea operatiilor de initializare stiva si listare elemente stiva (InitStiva si Listare). |
Copyright © 2024 - Toate drepturile rezervate