Skip to content

Instantly share code, notes, and snippets.

@tornikegomareli
Created May 10, 2017 15:56
Show Gist options
  • Save tornikegomareli/b7d815eec9e0edb13b27b24bd7f33b4e to your computer and use it in GitHub Desktop.
Save tornikegomareli/b7d815eec9e0edb13b27b24bd7f33b4e to your computer and use it in GitHub Desktop.
Singly Linked list implementation in C++
#include <iostream>
using namespace std;
struct Element
{
char data;
Element * Next;
};
// ერთკავშირიანი ჩამონათვალი
class List
{
// სიის სათავე ელემენტის პოინტერი
Element * Head;
// სიის ბოლო (კუდის) ელემენტის პოინტერი
Element * Tail;
int Count;
public:
List();
~List();
// სიაში ელემენტის დამატება
// (ახალაი ელემენტი ხდება ბოლო)
void Add(char data);
// სიის ელემენტის წაშლა
// (იშლება სათავე ელემენტი)
void Del();
// მთლიანი სიის წაშლა
void DelAll();
// სიის შიგთავსის ბეჭდვა
// (ბეჭდვა იწყება სათავე ელემენტიდან)
void Print();
// სიაში არსებული ელემენტების რაოდენობის გამოტანა
int GetCount();
};
List::List()
{
Head = Tail = NULL;
Count = 0;
}
List::~List()
{
// ყველა ელემენტის წაშლის ფუნქციის გამოძახება
DelAll();
}
int List::GetCount()
{
// ელემენტების რაოდენობის დაბრუნება
return Count;
}
void List::Add(char data)
{
// ახალი ელემენტის შექმნა
Element * temp = new Element;
// მოაცემის შეტანა
temp->data = data;
// შემდეგი ელემენტი არ შექმნილა
temp->Next = NULL;
// ახალი ელემენტი ხდება სიის ბოლო ელემენტი
// თუ ის არაა პირველად დამატებული
if (Head != NULL) {
Tail->Next = temp;
Tail = temp;
}
// ახალი ელემენტი ხდება ერთადერთი
// თუ ის ემატება პირველად
else {
Head = Tail = temp;
}
}
void List::Del()
{
// სათავო ელემენტის პოინტერის დამახსოვრება
Element * temp = Head;
// თავი გადაგვაქვს შემდეგ ელემენტზე
Head = Head->Next;
// ყოფილი სათავო ელემენტის წაშლა
delete temp;
}
void List::DelAll()
{
// მანამდე, სანამ კიდევ არის ელემენტები
while (Head != 0)
// წაშალე ელემენტები სათითაოდ
Del();
}
void List::Print()
{
// სათავო ელემენტის მისამართის დამახსოვრება
Element * temp = Head;
// მანამდე, სანამ კიდევ არის ელემენტები
while (temp != 0)
{
// მონაცემის გამოტანა
cout << temp->data << " ";
// შემდეგ ელემენტზე გადასვლა
temp = temp->Next;
}
cout << "\n\n";
}
// სატესტო მაგალითი
void main()
{
// List კლასის ობიექტის შექმნა
List lst;
// სატესტო სტრინგი
char s[] = "Hello, World !!!\n";
// სტრინგის გამოტანა
cout << s << "\n\n";
// სტრინგის სიგრძის განსაზღვრა
int len = strlen(s);
// სტრინგის სიაში შეყვანა
for (int i = 0; i < len; i++)
lst.Add(s[i]);
// სიის შიგთავსის გამოტანა
lst.Print();
// სიის სამი ელემენტის წაშლა
lst.Del();
lst.Del();
lst.Del();
// სიის შიგთავსის გამოტანა
lst.Print();
cin.get();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment