İleri_liste konteynerin uygulanmasını sağlar tek bağlantılı liste veri yapısı. Verileri, her öğenin dizideki bir sonraki öğeye işaret ettiği bitişik olmayan bellekte saklar. Bu, öğenin konumu bilindiğinde ekleme ve silme işlemlerini daha hızlı hale getirir.
Sözdizimi
İleri liste şu şekilde tanımlanır: std::forward_list içindeki sınıf şablonu< ileri_liste > başlık dosyası.
powershell vs bash
ileri_liste
fl;
Neresi
- T: İleri listedeki öğelerin veri türü.
- F: Yönlendirme listesine atanan ad.
Bildirim ve Başlatma
Bir forward_list aşağıdaki örnekte gösterildiği gibi çeşitli yollarla bildirilebilir ve başlatılabilir:
C++
#include using namespace std; void printFL(forward_list<int>& fl) { for (auto i : fl) cout << i << ' '; cout << 'n'; } int main() { // Creating an empty forward_list forward_list<int> fl1; // Creating a forward_list with // default value forward_list<int> fl2(3 4); // Creating a forward_list from an // initializer list forward_list<int> fl3 = {1 5 3 4}; printFL(fl2); printFL(fl3); return 0; }
Çıkış
4 4 4 1 5 3 4
Örnek: Yukarıdaki programda, üç şekilde basit bir şekilde başlatılmış ileri liste yapıyoruz:
- İfade ileri_liste
FL1 tam sayıların boş bir ileri listesi oluşturur. - İfade ileri_liste
fl2(34) 3 boyutunda ve her öğe 4 olan bir ileri liste oluşturur. - İfade ileri_liste
fl3 = {1 5 3 4} bir iletme listesi oluşturur ve başlatıcı listesindeki öğelerle başlatır.
Temel İşlemler
İleri listede gerçekleştirebileceğimiz temel işlemler şunlardır:
1. Öğelere Erişim
İleri listenin öğelerine diziler veya vektörler gibi indeksler kullanılarak erişilemez. Erişmek için listeyi baştan itibaren istenen konuma kadar sırayla gitmemiz gerekiyor. Bu artırılarak yapılabilir başlamak() yineleyici ancak kullanmak daha iyidir Sonraki() veya ilerlemek() işlev.
Ancak listenin ilk öğesine şu adresten kolayca erişilebilir: ön() Yöntem.
Örnek:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Access the first element cout << fl.front() << endl; // Access third element auto it = next(fl.begin() 2); cout << *it; return 0; }
Çıkış
1 3
Örnek: Yukarıdaki programda ilk eleman kullanılarak yazdırılır. ön() Yöntem. Üçüncü öğeye erişmek için Sonraki() yineleyiciyi baştan iki konum taşımak için kullanılır ve *BT yineleyicinin referansını kaldırmak için kullanılır.
2. Eleman Ekleme
Öğeler kullanılarak ileri listeye eklenebilir. insert_after() işlev. Elemanın ekleneceği yineleyiciyi gerektirir. Ancak ön tarafa hızlı yerleştirme aşağıdaki özelliklerle desteklenir: push_front() Yöntem.
Örnek:
C++#include using namespace std; int main() { forward_list<int> fl = {5 4}; // Inserting Element at front fl.push_front(1); // Insert 3 after the second element auto it = fl.begin(); advance(it 1); fl.insert_after(it 3); for (auto x: fl) cout << x << ' '; return 0; }
Çıkış
1 5 3 4
Açıklama: Bu programda forward_list'in ilk elemanı ön tarafa eklenir. push_front() işlev. Daha sonra bir yineleyici oluşturulur ve kullanılarak bir konum ileri taşınır. ilerlemek() işlev. Bundan sonra eleman 5 kullanılarak ikinci elemandan sonra eklenir. insert_after() işlev.
3. Öğelerin Güncellenmesi
Mevcut öğelerin değeri, onlara erişilerek ve kullanılarak kolayca değiştirilebilir. atama operatörü yeni değeri atamak için.
Örnek:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Updating first element fl.front() = 111; cout << fl.front() << endl; // Updating third element auto it = next(fl.begin() 2); *it = 333; cout << *it; return 0; }
Çıkış
111 333
4. Eleman Bulma
İleri liste, bir öğeyi aramak için herhangi bir üye işlevi sağlamaz ancak bulmak() Verilen herhangi bir değeri bulan algoritma.
Örnek :
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Finding 3 auto it = find(fl.begin() fl.end() 3); if (it != fl.end()) cout << *it; else cout << 'Element not Found'; return 0; }
Çıkış
3
5. Geçiş
Bir ileri liste kullanılarak geçilebilir başlamak() Ve son() döngüye sahip yineleyiciler var ancak yalnızca ileri doğru hareket edebiliyoruz, geriye doğru hareket edemiyoruz.
Örnek:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Traversing using range-based for loop for(auto i : fl) cout << i << ' '; cout << endl; return 0; }
Çıkış
1 5 3 4
6. Öğeleri Silme
İleri listede, verilen konumdaki öğeyi kullanarak silebiliriz. delete_after() Yöntem. Bu yöntem yineleyiciyi hedef öğeden önceki bir konuma götürür. Ön taraftan hızlı silme işlemi aşağıdakiler kullanılarak mümkündür: pop_front() Yöntem.
Örnek:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Delete first element fl.pop_front(); // Delete third element auto it = fl.begin(); advance(it 1); fl.erase_after(it); for (auto x: fl) cout << x << ' '; return 0; }
Çıkış
5 3
7. Yönlendirme Listesinin Boyutu
forward_list'in yerleşik size() işlevi yoktur. Boyutunu bulmak için, elemanları bir döngü ile geçerek veya std:: mesafesini kullanarak manuel olarak saymamız gerekir.
C++#include #include #include using namespace std; int main() { forward_list<int> flist={10203040}; //Calculate size by counting elements using std:: distance int size=distance(flist.begin()flist.end()); cout<<'Size of forward_list: '<<size<<endl; return 0; }
Çıkış
Size of forward_list: 4
8. boş()
Forward_list'in boş olup olmadığını kontrol etmek için kullanılır.
Liste boşsa true değerini döndürür, aksi takdirde konteynerde veri olup olmadığının hızlı bir şekilde doğrulanmasına olanak tanır.
#include #include using namespace std; int main() { forward_list<int> flist; if (flist.empty()) { cout << 'The forward_list is empty.' << endl; } flist.push_front(10); if (!flist.empty()) { cout << 'The forward_list is not empty.' << endl; } return 0; }
Çıkış
The forward_list is empty. The forward_list is not empty.
Zaman Karmaşıklığı
Aşağıdaki tabloda, ileri listedeki yukarıdaki işlemlerin zaman karmaşıklığı listelenmektedir:
| Operasyon | Zaman Karmaşıklığı |
|---|---|
| İlk öğeye erişin | Ç(1) |
| Erişim nbueleman | Açık) |
| Ön tarafa yerleştirin | Ç(1) |
| Belirli bir konumdan sonra ekle | Açık) |
| İlk öğeyi sil | Ç(1) |
| Belirli bir konumdan sonra sil | Açık) |
| Geçiş | Açık) |
İleri Liste ve Liste
Özellik Java polimorfizmi | ileri_liste | liste |
|---|---|---|
Bağlantılı Liste Türü | Tek bağlantılı liste | Çift bağlantılı liste |
Geçiş | Yalnızca ileriye doğru hareket edebilir | Hem ileri hem de geri hareket edebilir |
Bellek kullanımı | Daha az bellek kullanır (düğüm başına yalnızca bir işaretçi) | Daha fazla bellek kullanır (düğüm başına iki işaretçi) |
Ekleme/Silme | Hızlı ekleme ve silme, ancak yalnızca belirli bir konumda veya sonrasında | İstediğiniz yere hızlı ekleme ve silme (bir konumdan önce veya sonra) |
Desteklenen işlevler | Listeyle karşılaştırıldığında sınırlı (boyut yok() ters yineleyici yok) | size() revers() çift yönlü yineleyicileri içeren daha eksiksiz arayüz. |
| | |