Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LSI.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace p23_LSI
- {
- class LSI
- {
- Nod L; // Referinta la inceputul listei
- // Constructori
- // Construieste lista cu un nod care retine valoarea val
- public LSI(int val)
- {
- L = new Nod(val);
- }
- public LSI()
- {
- L = null;
- }
- // Destructorul
- ~LSI()
- {
- L = null;
- }
- // Metoda de adaugare a unui nod la inceputul listei si nodul retine valoarea val
- public void AddBegin(int val)
- {
- Nod p = new Nod(val);
- p.leg = L;
- L = p;
- }
- // Adauga un nod cu informatia val pe pozitia k in lista
- public void Add(int val, int k)
- {
- int n = Count;
- if (k <= 1) // Adauga la inceput in lista
- {
- AddBegin(val);
- return;
- }
- Nod p, q;
- q = L;
- for (p = L; p != null && k > 1; p = p.leg)
- {
- k--;
- q = p;
- }
- // Inserez dupa nodul q
- p = new Nod(val);
- p.leg = q.leg;
- q.leg = p;
- }
- // Sterge al k-lea nod din lista
- public void Erase(int k)
- {
- Nod p, q;
- int n = Count;
- if (k <= 0 || k > n) return;
- if (k == 1) // Sterg primul nod
- {
- p = L;
- L = L.leg;
- p = null;
- return;
- }
- // Ma pozitionez pe al k-1-lea nod
- for (p = L; k > 2; p = p.leg)
- k--;
- q = p.leg;
- p.leg = q.leg;
- q = null;
- }
- // Proprietate care numara cate noduri are lista
- public int Count
- {
- get
- {
- int cnt = 0;
- for (Nod p = L; p != null; p = p.leg)
- cnt++;
- return cnt;
- }
- }
- // Indexatorul
- public int this[int i]
- {
- get
- {
- int n = Count;
- if (i <= 0) i = 1;
- if (i > n) i = n;
- Nod p;
- for (p = L; p != null && i > 1; p = p.leg)
- i--;
- return p.info;
- }
- set
- {
- int n = Count;
- if (i <= 0) i = 1;
- if (i > n) i = n;
- Nod p;
- for (p = L; p != null && i > 1; p = p.leg)
- i--;
- p.info = value;
- }
- }
- public override string ToString()
- {
- string s = "";
- for (Nod p = L; p != null; p = p.leg)
- s += (p.info + " ");
- return s;
- }
- // Redefinirea operatorilor
- public static LSI operator +(LSI A, LSI B)
- {
- LSI C = new LSI();
- Nod p;
- int k = 0;
- for (p = A.L; p != null; p = p.leg)
- {
- k++;
- C.Add(p.info, k);
- }
- for (p = B.L; p != null; p = p.leg)
- {
- k++;
- C.Add(p.info, k);
- }
- return C;
- }
- public static LSI operator +(LSI A, int val)
- {
- LSI B = new LSI();
- Nod p;
- int k = 0;
- for (p = A.L; p != null; p = p.leg)
- B.Add(p.info, ++k);
- B.Add(val, ++k);
- return B;
- }
- public static LSI operator +(int val, LSI A)
- {
- LSI B = new LSI(val);
- for (int i = 1; i <= A.Count; i++)
- B.Add(A[i], i + 1);
- return B;
- }
- }
- }
- Nod.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace p23_LSI
- {
- class Nod
- {
- public int info;
- public Nod leg;
- public Nod(int val)
- {
- info = val;
- leg = null;
- }
- }
- }
- Program.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace p23_LSI
- {
- class Program
- {
- static void Main(string[] args)
- {
- LSI A = new LSI();
- for (int i = 20; i >= 1; i--)
- A.AddBegin(i * i);
- Console.WriteLine(A);
- LSI B = new LSI();
- for (int i = 10; i >= 0; i--)
- B.AddBegin(i);
- LSI C = A + B;
- Console.WriteLine(C);
- B = A + 444;
- Console.WriteLine(A);
- Console.WriteLine(B);
- B = 333 + B;
- Console.WriteLine(B);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement