ATESTAT LA INFORMATIC
TITLUL LUCRRII:
Trgu-Jiu
-2017-
CUPRINS
1. Argument................................................3
2. Notiuni teoretice.....................................4
4. Bibliografie...........................................25
2
Argument
3
1. Structura listei
Pentru a asigura un grad mai mare de generalitate listei a fost creat un alias
pentru datele utile (in cazul nostru un intreg): // Datele asociate unui // element
dintr-o lista typedef int Date; In cazul in care se doreste memorarea unui alt tip de
date, trebuie schimbata doar declaratia aliasului Date. Pentru memorarea listei se
foloseste o structura autoreferita. Acesta structura va avea forma: // Structura unui
element // dintr-o lista simplu inlantuita struct Element { // datele efective
memorate Date valoare; // legatura catre nodul urmator Element* urmator; }; In
cazul in care elemenul este ultimul din lista, pointerul urmator va avea valoarea
NULL. Declararea listei se face sub forma: // declarare lista vida Element* cap =
NULL;
2. Operatii cu liste
Principalele operatii cu liste sunt:
Parcurgere si afisare lista
Lista este parcursa pornind de la pointerul spre primul element si avansand
folosind pointerii din structura pana la sfarsitul listei (pointer NULL). // Parcurgere
si afisare lista simpla void Afisare(Element* cap) { // cat timp mai avem
elemente // in lista while (cap != NULL) { // afiseaza elementul curent cout <<
cap->valoare << endl; // avanseaza la elementul urmator cap = cap->urmator; } }
Inserare element
Inserarea unui element se poate face la inceputul sau la sfarsitul listei.
a) Inserare la inceput Acesta este cazul cel mai simplu: trebuie doar alocat
elementul, legat de primul element din lista si repozitionarea capului listei: //
Inserare element la inceputul unei // liste simplu inlantuite void
InserareInceput(Element* &cap, Date val) { // Alocare nod si initializare valoare
Element *elem = new Element; elem->valoare = val; // legare nod in lista elem-
>urmator = cap; // mutarea capului listei cap = elem; }
b) Inserare la sfarsitul listei In acest caz trebuie intai parcursa lista si dupa aceea
adaugat elementul si legat de restul listei. De asemenea, trebuie avut in vedere
cazul in care lista este vida. // Inserare element la sfarsitul unei // liste simplu
4
inlantuite void InserareSfarsit(Element* &cap, Date val) { // Alocare si initializare
nod Element *elem = new Element; elem->valoare = val; elem->urmator = NULL;
// daca avem lista vida if (cap == NULL) // doar modificam capul listei cap = elem;
else { // parcurgem lista pana la ultimul nod Element *nod = cap; while (nod-
>urmator != NULL) nod = nod->urmator; // adaugam elementul nou in lista nod-
>urmator = elem; } }
c) inserare dupa un element dat void InserareInterior(Element* &cap, Element* p,
Date val) { // Alocare si initializare nod Element *elem = new Element; elem-
>valoare = val; elem->urmator = NULL; // lista vida if (cap == NULL) { cap =
elem; return; } // inserare la inceputul listei if (cap == p) { elem->urmator = cap;
cap = elem; return; } // inserare in interior elem->urmator = p->urmator; p-
>urmator = elem; }
Cautare element
Cautarea unui element dintr-o lista presupune parcurgerea listei pentru
identificarea nodului in functie de un criteriu. Cele mai uzuale criterii sunt cele
legate de pozitia in cadrul listei si de informatiile utile continute de nod. Rezultatul
operatiei este adresa primului element gasit sau NULL.
a) Cautarea dupa pozitie Se avanseaza pointerul cu numarul de pozitii specificat: //
Cautare element dupa pozitie Element* CautarePozitie(Element* cap, int pozitie) {
int i = 0; // pozitia curenta // parcurge lista pana la // pozitia ceruta sau pana la //
sfarsitul listei while (cap != NULL && i < pozitie) { cap = cap->urmator; i++; } //
daca lista contine elementul if (i == pozitie) return cap; else return NULL; }
b) Cautarea dupa valoare Se parcurge lista pana la epuizarea acesteia sau
identificarea elementului: // Cautare element dupa valoare Element*
CautareValoare(Element* cap, Date val) { // parcurge lista pana la gasirea //
elementului sau epuizarea listei while (cap != NULL && cap->valoare != val) cap
= cap->urmator; return cap; }
Stergere element
5
a) Stergerea unui element din interiorul listei (diferit de capul listei) In acest caz
avem nevoie de adresa predecesorului elementului de sters. Se modifica legaturile
in sensul scurtcircuitarii elementului de sters, dupa care se elibereaza memoria
corespunzatoare elementului de sters: // sterge un element din interiorul listei //
primind ca parametru adresa predecesorului void
StergereElementInterior(Element* predecesor) { // salvam referinta la elementul de
sters Element* deSters = predecesor->urmator; // scurcircuitam elementul
predecesor->urmator = predecesor->urmator->urmator; // si il stergem delete
deSters; }
b) Stergerea unui element de pe o anumita pozitie Daca elementul este primul din
lista, atunci se modifica capul listei, altfel se cauta elemental si se sterge folosind
functia definite anterior: void StergerePozitie(Element* &cap, int pozitie) { // daca
lista e vida nu facem nimic if (cap == NULL) return; // daca este primul element,
atunci // il stergem si mutam capul if (pozitie == 0) { Element* deSters = cap; cap
= cap->urmator; delete deSters; return; } // daca este in interor, atunci folosim //
functia de stergere Element* predecesor = CautarePozitie(cap, pozitie-1);
StergereElementInterior(predecesor); } c) stergerea dupa o valoare Se cauta
predecesorul elementului si se foloseste functia de stergere element: void
StergereValoare(Element* &cap, Date val) { // daca lista e vida nu facem nimic if
(cap == NULL) return; // daca este primul element, atunci // il stergem si mutam
capul if (cap->valoare == val) { Element* deSters = cap; cap = cap->urmator;
delete deSters; return; } // cautam predecesorul Element* elem = cap; while (elem-
>urmator != NULL && elem->urmator->valoare != val) elem = elem->urmator; //
daca a fost gasit, atunci il stergem if (elem->urmator != NULL)
StergereElementInterior(elem); }
6
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Liste simplu inlantuite</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js" type="text/javascript"></script>
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
scale=1.0" />
</head>
<body>
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li class="selected-item"><a href="index.html">Definitie</a></li>
<li><a href="creare.html">Crearea si Afisarea</a></li>
<li><a href="inserare.html">Inserarea</a></li>
<li><a href="stergere.html">Stergerea unui element</a></li>
<li><a href="probleme.html">Probleme propuse</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
7
<h2>Liste liniare simplu inlantuite</h2>
<p>O lista este <strong>o structura de date de tip secvential</strong>, alcatuita dintr-o
succesiune de elemente de acelasi tip, careia i se pot aplica o serie de operatii specifice.</p>
<p>Astfel, fiecare element cu exceptia primului, are un predecesor, si, de asemenea, fiecare
element cu exceptia ultimului are un succesor.</p>
<p><strong>Inlantuirea elementelor se poate face in doua moduri:</strong> </p>
<ul class="styledlist">
<li>elementele sunt memorate succesiv, unul dupa altul;</li>
<li>elementele sunt memorate aleator, in zone diferite de memorie, dar in acest caz fiecare
element este insotit de o asa-numita informatie de legatura, prin intermediul careia putem accesa
elementul urmator al listei.</li>
</ul>
<p><strong>Dintre numeroasele operatii care se pot aplica asupra unei liste, amintim:</strong>
</p>
<ul class="styledlist">
<li>crearea listei;</li>
<li>afisarea elementelor listei;</li>
<li>inserarea unui element in lista(la inceputul, in interiorul sau la sfarsitul listei);</li>
<li>stergerea unui element din lista(de la inceput, din interior sau de la sfarsit);</li>
<li>accesarea unui element oarecare din lista;</li>
<li>cautarea unui element care indeplineste o anumita conditie;</li>
<li>ordonarea elementelor listei dupa un anumit criteriu;</li>
</ul>
<td>void</td>
<td>-</td>
</tr>
<tr>
<td><a href="creare.html">afisare</a></td>
<td>void</td>
<td>-</td>
</tr>
<tr>
<td><a href="inserare.html">inserare_inainte</a></td>
<td>void</td>
<td>int val</td>
</tr>
<tr>
<td><a href="inserare.html">inserare_dupa</a></td>
<td>void</td>
<td>int val</td>
</tr>
<tr>
<td><a href="stergere.html">stergere</a></td>
<td>void</td>
<td>int val</td>
</tr>
</table>
9
<p>Pentru o mai buna intelegere a listelor si operatiilor aplicate asupra acestora, se recomanda
vizionarea urmatorului tutorial:</p>
<iframe width="420" height="345" src="http://www.youtube.com/embed/NobHlGUjV3g">
</iframe>
<div>
<a href="contact.html" class="button button-reversed">Contact</a>
</div>
</article>
</section>
<div class="clear"></div>
</section>
</body>
<footer>
<p>Copyright © 2017 Andreea Laura Cojocaru. All Rights Reserved.</p>
</footer>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Liste simplu inlantuite</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js"
type="text/javascript"></script>
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
scale=1.0" />
</head>
<body>
10
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li><a href="index.html">Definitie</a></li>
<li class="selected-item"><a href="creare.html">Crearea si Afisarea</a></li>
<li><a href="inserare.html">Inserarea</a></li>
<li><a href="stergere.html">Stergerea unui element</a></li>
<li><a href="probleme.html">Probleme propuse</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
<h2>Crearea si afisarea unei liste</h2>
<p>Urmatorul program ofera o modalitate de creare si afisare a unei liste liniare simplu
inlantuite care prelucreaza numere intregi:</p>
<textarea id="codeEditor" style="width: 100%; height 100%;" autocorrect="off"
autocapitalize="off" spellcheck="false">
#include<iostream.h>
#include<conio.h>
struct nod
{ int info;
nod *next;};
void main()
12
{clrscr();
int b;
cout << "n=";
cin>>n;
for(int i=1;i<=n;i++)
adaugare_nod( );
cout <<endl;
afisare();
getch();
}
</textarea>
<a href="contact.html" class="button button-reversed">Contact</a>
</article>
</section>
<div class="clear"></div>
</section>
<footer>
<p>Copyright © 2017 Andreea-Laura Cojocaru. All Rights Reserved.</p>
</footer>
</body>
</html>
Inserare HTML
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Inserarea Elementelor</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js" type="text/javascript"></script>
13
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
scale=1.0" />
</head>
<body>
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li><a href="index.html">Definitie</a></li>
<li><a href="creare.html">Crearea si Afisarea</a></li>
<li class="selected-item"><a href="inserare.html">Inserarea</a></li>
<li><a href="stergere.html">Stergerea unui element</a></li>
<li><a href="probleme.html">Probleme propuse</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
<h2>Inserarea unui element intr-o lista</h2>
<p> Inserarea unui element nou in lista se poate face inainte sau dupa un nod care retine o
valoare data (continut util). Evident s-ar putea realiza si inserare pe o pozitie data astfel incat
toate elemantele de la acea pozitie incepand se vor deplasa mai la "dreapta".</p>
<h3>A. Inserarea unui element dupa un nod</h3>
<p>In cazul in care inserarea se face "dupa" se avanseaza cu un nod intermediar c in lista pana la
nodul dupa care se va face inserarea, se creaza un nou nod (nodul a) apoi se genereaza legaturile:
mai intai de la a la c->next apoi de la c la a. Exista posibilitatea ca ultimul nod sa retina valoarea
dupa care se realizeaza inserarea caz in care se modifica ultimul.</p>
<textarea id="codeEditor" style="width: 100%; height 100%;" autocorrect="off"
autocapitalize="off" spellcheck="false">
14
cu *c se face avansarea in lista pana la nodul ce contine
valoarea dupa care se face inserarea;
evident se porneste de la primul; */
c=p;
while(c->info!=val &&c)
c=c->next;
a=new nod;
cout << "valoarea de inserat ";
cin>>a->info;
a->next=c->next;
c->next=a;
//pentru ca exista si posibilitatea ca valoarea
//dupa care se face inserarea sa fie retinuta de ultimul element
if(c==u)
u=a;
}
</textarea>
<img src="media/image002.jpg">
<h3>B. Inserarea unui element inaintea unui nod</h3>
<p>In cazul in care inserarea se face "inainte" se avanseaza cu un nod intermediar c in lista pana
la un nod situat inaintea celui cautat , se creaza un nou nod (nodul a) apoi se genereaza
legaturile: mai intai de la a la c->next apoi de la c la a. Exista posibilitatea ca primul nod sa
retina valoarea inainte de care se realizeaza inserarea caz in care se modifica primul.</p>
<textarea id="codeEditor" style="width: 100%; height 100%;" autocorrect="off"
autocapitalize="off" spellcheck="false">
</html>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Liste simplu inlantuite</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js" type="text/javascript"></script>
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
16
scale=1.0" />
</head>
<body>
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li><a href="index.html">Definitie</a></li>
<li><a href="creare.html">Crearea si Afisarea</a></li>
<li><a href="inserare.html">Inserarea</a></li>
<li class="selected-item"><a href="stergere.html">Stergerea unui element</a></li>
<li><a href="probleme.html">Probleme propuse</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
<h2>Stergerea unui element dintr-o lista</h2>
<p> In cazul in care se realizeaza stergerea se avanseaza cu un nod intermediar c in lista pana la
un nod situat inaintea celui cautat (nodul de sters), se genereaza noule legaturi intre precedentul
si urmatorul nodului de sters, se elibereaza spatiul de memorie.</p>
</textarea>
<a href="contact.html" class="button button-reversed">Contact</a>
</article>
</section>
<div class="clear"></div>
</section>
</body>
<footer>
<p>Copyright © 2017 Andreea-Laura Cojocaru. All Rights Reserved.</p>
</footer>
</html>
Probleme HTML
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Liste simplu inlantuite</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
18
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js" type="text/javascript"></script>
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
scale=1.0" />
</head>
<body>
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li><a href="index.html">Definitie</a></li>
<li><a href="creare.html">Crearea si Afisarea</a></li>
<li><a href="inserare.html">Inserarea</a></li>
<li><a href="stergere.html">Stergerea unui element</a></li>
<li class="selected-item"><a href="probleme.html">Probleme propuse</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
<h2>Probleme propuse</h2><img src="media/probleme.png" align="right" >
<ol type="1">
<li>Fie o lista de numere intregi. Sa se insereze dupa oricare valoare 3 valoarea 4</li>
<li>Fie o lista de numere reale. Sa se insereze intre oricare doua valori media aritmetica a
elementelor alaturate.</li>
<li>O lista contine titlul si autorul unei carti, precum si editura.
<ul>
<li>Sa se stearga cartile cu titlul "Poezii". Afisati continutul listei.</li>
<li>Sa se insereze un nou volum in lista: "Rascoala-Rebreanu-All" dupa "Ion-Rebreanu-All".
Afisati continutul listei.</li>
<li>Sa se insereze un nou volum in lista "Padurea spanzuratilor-Rebreanu-All" inainte de
"Rascoala-Rebreanu-All". Afisati continutul listei.</li>
</ul>
19
</li>
<li>Sa se stearga elementele egale cu x dintr-o lista. <a
href="solutie.html"><b>Solutie</b></a></li>
<li>Sa se stearga elementul minim dintr-o lista</li>
<li>Sa se elimine elementele (elementul) din mijlocul unei liste</li>
<li>Sa se genereze o lista care contine numele unor persoane astfel incat sa fie ordonata</li>
</ol>
<a href="contact.html" class="button button-reversed">Contact</a>
</article>
</section>
<div class="clear"></div>
</section>
<footer>
<p>Copyright © 2017 Andreea-Laura Cojocaru. All Rights Reserved.</p>
</footer>
</body>
</html>
Contact HTML
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Liste simplu inlantuite</title>
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/custom.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script type="text/javascript" src="script/highlight.pack.js" type="text/javascript"></script>
<link rel="stylesheet" href="style/vs.css" type="text/css">
<link rel="stylesheet" href="style/style.css" type="text/css" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-
scale=1.0" />
</head>
20
<body>
<section id="body" class="width">
<aside id="sidebar" class="column-left">
<header>
<h1><a href="#">Liste simplu inlantuite</a></h1>
</header>
<nav id="mainnav">
<ul>
<li><a href="index.html">Definitie</a></li>
<li><a href="creare.html">Crearea si Afisarea</a></li>
<li><a href="inserare.html">Inserarea</a></li>
<li><a href="stergere.html">Stergerea unui element</a></li>
<li><a href="probleme.html">Probleme propuse</a></li>
<li class="selected-item"><a href="contact.html">Contact</a></li>
</ul>
</nav>
</aside>
<article>
<h2>Contact</h2>
<div id="site_content">
<div class="contact_div">
<ul style="list-style-type:circle">
<li><font size="5"><b>Titlu:</b> <em>Liste simplu inlantuite</em></font></li>
<li><font size="5"><b>Nume si prenume:</b> <em>Cojocaru Andreea-
Laura</em></font></li>
<li><font size="5"><b>Clasa: </b><em>a XII-a G</em></font></li>
<li><font size="5"><b>Profesor coordonator: </b><em>Flavius Boian</em></font></li>
</ul>
</div>
<div id="contact_div">
<h3>Bibliografie</h3>
<ul type="square">
<li><b>Programarea in limbajul C/C++ pentru liceu de Emanuela Cerchez si Marinel
Serban,editura Polirom
<li><b>http:// ase.softmentor.ro /StructuriDeDate /Fisiere/03 _ Liste Simple
<li><b>Sabin Buraga - Proiectare situri Web: design si functionalitate, Editura Polirom
</ul>
21
</div>
</div>
</article>
</section>
<div class="clear"></div>
</section>
<footer>
<p>Copyright © 2017 Andreea-Laura Cojocaru. All Rights Reserved.</p>
</footer>
</body>
</html>
Bibliografie:
22
1. Teodoru Gugoiu: HTML, XHTML, CSS si XML prin exemple, editura
Teora
2. http://www.runceanu.ro/adrian/wp-content/cursuri/S2progr2012/curs8-
PC2.pdf
3. Programarea in limbajul C/C++ pentru liceu de Emanuela Cerchez si
Marinel Serban,editura Polirom
4. Sabin Buraga - Proiectare situri Web: design si functionalitate, Editura
Polirom
23