Sei sulla pagina 1di 4

1: ////liste dublu inlantuite

2: #include <iostream>//pt cout


3: #include <stdlib.h>
4:
5: using namespace std;//pt scrierea prescurtata, fara std::cout, etc
6:
7: typedef int info;
8:
9: typedef struct element{
10: info informatie;
11: element *pointerUrmatorulElement;
12: element *pointerElementAnterior;
13: } ELEMENT, *PELEMENT;
14:
15: void listaAfisare(PELEMENT capLista);
16:
17: PELEMENT elementNou(PELEMENT capLista, info informatie);//implicit la coada
listei
18:
19: PELEMENT listaDinVector(PELEMENT capLista, info *tablou, int dimensiuneTablou);
20:
21: PELEMENT inserareDupa(PELEMENT capLista, info informatie, info
informatieNoua);//adauga informatieNoua dupa informatie
22:
23: PELEMENT inserareInainte(PELEMENT capLista, info informatie, info
informatieNoua);//adauga informatieNoua inainte de informatie
24:
25: PELEMENT stergeElement(PELEMENT capLista, info informatie);//sterge un element
ce are continutul campului informatie egal cu "informatie"
26:
27: PELEMENT stergeLista(PELEMENT capLista);//sterge toata lista
28:
29: int main(){
30:
31: info tablou[5] = {1, -2, 3, 4, -5};
32: PELEMENT capLista = NULL;
33:
34: cout << "Lista incarcata din vector" << endl;
35: capLista = listaDinVector(capLista, tablou, 5);
36: listaAfisare(capLista);
37:
38: cout << "Adaug un nou element" << endl;
39: capLista = elementNou(capLista, 13);
40: listaAfisare(capLista);
41:
42: cout << "Adaug 2 dupa -2" << endl;
43: capLista = inserareDupa(capLista, -2, 2);
44: listaAfisare(capLista);
45:
46: cout << "Adaug -13 dupa 13" << endl;
47: capLista = inserareDupa(capLista, 13, -13);
48: listaAfisare(capLista);
49:
50:
51: cout << "Adaug -3 inainte de 3" << endl;
52: capLista = inserareInainte(capLista, 3, -3);
53: listaAfisare(capLista);
54:
55: cout << "Adaug -1 inainte de 1" << endl;
56: capLista = inserareInainte(capLista, 1, -1);
57: listaAfisare(capLista);
58:
59:
60: cout << "Sterge -3" << endl;
61: capLista = stergeElement(capLista, -3);
62: listaAfisare(capLista);
63:
64: cout << "Sterge -1" << endl;
65: capLista = stergeElement(capLista, -1);
66: listaAfisare(capLista);
67:
68: cout << "Sterge -13" << endl;
69: capLista = stergeElement(capLista, -13);
70: listaAfisare(capLista);
71:
72:
73: cout << "Sterge toata lista" << endl;
74: capLista = stergeLista(capLista);
75: listaAfisare(capLista);
76:
77: cout << "Introduc elementul 5 in lista" << endl;
78: capLista = elementNou(capLista, 5);
79: listaAfisare(capLista);
80:
81: system("PAUSE");//in stdlib
82: return 0;
83: }
84:
85: void listaAfisare(PELEMENT capLista){
86: PELEMENT elementCurent = capLista;
87: if(capLista == NULL){
88: cout << "Lista goala" << endl << endl;
89: return;
90: }
91: while(elementCurent!=NULL){
92: cout << elementCurent->informatie << "\t";
93: elementCurent = elementCurent->pointerUrmatorulElement;
94: }
95: cout << endl << endl;
96: }
97:
98: PELEMENT elementNou(PELEMENT capLista, info informatie){
99: if(!capLista){//dc lista e goala
100: capLista = new ELEMENT;
101: if(!capLista){
102: cout << "nu mai exista loc in memorie";
103: return capLista;
104: }
105: capLista->informatie = informatie;
106: capLista->pointerUrmatorulElement = NULL;
107: capLista->pointerElementAnterior = NULL;
108: }
109: else{
110: //parcurgere lista, pt a ajunge la ultimul element
111: PELEMENT elementCurent = capLista;
112: while((elementCurent->pointerUrmatorulElement)!=NULL) elementCurent =
elementCurent->pointerUrmatorulElement;
113:
114: //adaugam noua informatie
115: PELEMENT elementAdaugat = new ELEMENT;
116: if(!elementAdaugat){
117: cout << "nu mai exista loc in memorie";
118: return capLista;
119: }
120:
121: elementCurent->pointerUrmatorulElement = elementAdaugat;
122: elementAdaugat->informatie = informatie;
123: elementAdaugat->pointerUrmatorulElement = NULL;
124: elementAdaugat->pointerElementAnterior = elementCurent;
125: }
126: return capLista;
127: }
128:
129: PELEMENT listaDinVector(PELEMENT capLista, info *tablou, int dimensiuneTablou){
130: int i = 0;
131: if (dimensiuneTablou > 0)
132: while(dimensiuneTablou--) capLista = elementNou(capLista, tablou[i++]);
133: return capLista;
134: }
135:
136: PELEMENT inserareDupa(PELEMENT capLista, info informatie, info informatieNoua){
137: PELEMENT elementCurent = capLista;
138: while((elementCurent!=NULL)&&(elementCurent->informatie!=informatie))
elementCurent = elementCurent->pointerUrmatorulElement;
139: if(elementCurent==NULL) cout << "Nu exista elementul " << informatie <<
endl;
140: else{
141: PELEMENT elementNou = new ELEMENT;
142: if(!elementNou) cout << "nu mai exista loc in memorie";
143: else{
144: elementNou->informatie = informatieNoua;
145: elementNou->pointerUrmatorulElement = elementCurent-
>pointerUrmatorulElement;
146: elementNou->pointerElementAnterior = elementCurent;
147: elementCurent->pointerUrmatorulElement = elementNou;
148: if(elementNou->pointerUrmatorulElement!=NULL) elementNou-
>pointerUrmatorulElement->pointerElementAnterior = elementNou;
149: }
150: }
151: return capLista;
152: }
153:
154:
155: PELEMENT inserareInainte(PELEMENT capLista, info informatie, info
informatieNoua){
156: PELEMENT elementCurent = capLista, elementNou = new ELEMENT,
anteriorElementCurent;
157:
158: if(!elementNou) cout << "nu mai exista loc in memorie";
159: else elementNou->informatie = informatieNoua;
160:
161: if(capLista->informatie == informatie){
162: capLista->pointerElementAnterior = elementNou;
163: elementNou->pointerUrmatorulElement = capLista;
164: elementNou->pointerElementAnterior = NULL;
165: return elementNou;
166: }
167: else{
168:
169:
170: if(elementCurent==NULL){
171: cout << "Nu exista elementul " << informatie << endl;
172: delete elementNou;
173: }
174: else{
175: elementNou->pointerElementAnterior = elementCurent-
>pointerElementAnterior;
176: elementNou->pointerUrmatorulElement = elementCurent;
177: if(elementCurent->pointerElementAnterior!=NULL) elementCurent-
>pointerElementAnterior->pointerUrmatorulElement = elementNou;
178: elementCurent->pointerElementAnterior = elementNou;
179: }
180: return capLista;
181: }
182: }
183:
184:
185: PELEMENT stergeElement(PELEMENT capLista, info informatie){
186: PELEMENT elementCurent = capLista, anteriorElementCurent;
187: if(elementCurent->informatie == informatie){
188: elementCurent = capLista;
189: capLista = capLista->pointerUrmatorulElement;
190: capLista->pointerElementAnterior = NULL;
191: delete elementCurent;
192: }
193: else{
194: while((elementCurent!=NULL)&&(elementCurent->informatie!=informatie))
elementCurent = elementCurent->pointerUrmatorulElement;
195:
196: if(elementCurent==NULL) cout << "Nu exista elementul " << informatie <<
endl;
197: else{
198: elementCurent->pointerElementAnterior->pointerUrmatorulElement =
elementCurent->pointerUrmatorulElement;
199: if(elementCurent->pointerUrmatorulElement!=NULL) elementCurent-
>pointerUrmatorulElement->pointerElementAnterior = elementCurent
>pointerElementAnterior;
200: delete elementCurent;
201: }
202: }
203: return capLista;
204: }
205:
206:
207: PELEMENT stergeLista(PELEMENT capLista){
208: PELEMENT elementSters;
209: while(capLista!=NULL){
210: elementSters = capLista;
211: capLista = capLista->pointerUrmatorulElement;
212: delete elementSters;
213: }
214: return NULL;
215: }
216:

Potrebbero piacerti anche