Created
May 10, 2017 15:56
-
-
Save tornikegomareli/b7d815eec9e0edb13b27b24bd7f33b4e to your computer and use it in GitHub Desktop.
Singly Linked list implementation in C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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