• 循环链表以及迭代器的使用c++


    循环链表,顺便也附上链表的迭代器

      1 #include <iostream>
      2 
      3 using namespace std;
      4 
      5 template<class T> class List;
      6 template<class T> class ListIterator;
      7 
      8 template<class T>
      9 class ListNode
     10 {
     11     friend class List<T>;
     12     friend class ListIterator<T>;
     13 private:
     14     T data;
     15     ListNode *Link;
     16     ListNode(T);
     17     ListNode(){}
     18 };
     19 
     20 template<class T>
     21 ListNode<T>::ListNode(T element)
     22 {
     23     data = element;
     24     Link = 0;
     25 }
     26 
     27 template<class T>
     28 class List
     29 {
     30     friend class ListIterator<T>;
     31 public:
     32     List(){first=new ListNode<T>; first->Link=first;}
     33     void Insert(T);
     34     void Delete(T);
     35 private:
     36     ListNode<T> *first;
     37 };
     38 
     39 template<class T>
     40 class ListIterator
     41 {
     42 public:
     43     ListIterator(const List<T>& l):mylist(l),current(l.first->Link){}
     44     bool NotNull();
     45     bool NextNotNull();
     46     T* First();
     47     T* Next();
     48 private:
     49     const List<T> &mylist;
     50     ListNode<T>* current;
     51 };
     52 
     53 template<class T>
     54 bool ListIterator<T>::NotNull()
     55 {
     56     if(current != mylist.first) return true;
     57     else return false;
     58 }
     59 
     60 template<class T>
     61 bool ListIterator<T>::NextNotNull()
     62 {
     63     if(current->Link != mylist.first) return true;
     64     else return false;
     65 }
     66 
     67 template<class T>
     68 T* ListIterator<T>::First()
     69 {
     70     if(NotNull()) return &current->data;
     71     else return 0;
     72 }
     73 
     74 template<class T>
     75 T* ListIterator<T>::Next()
     76 {
     77     current = current->Link;
     78 //    if(current==mylist.first)current=current->Link;
     79     return &current->data;
     80 }
     81 
     82 template<class T>
     83 void List<T>::Insert(T x)
     84 {
     85     ListNode<T> *newNode=new ListNode<T>(x);
     86     newNode->Link = first->Link;
     87     first->Link = newNode;
     88 }
     89 
     90 template<class T>
     91 void List<T>::Delete(T k)
     92 {
     93     ListNode<T> *previous = first;
     94     ListNode<T> *current;
     95     for(current=first->Link; (current!=first)&&(current->data!=k);
     96         previous=current, current=current->Link);
     97     if(current!=first)
     98     {
     99         previous->Link = current->Link;
    100         delete current;
    101     }
    102 }
    103 
    104 int main()
    105 {
    106     cout << "Hello world!" << endl;
    107 
    108     List<int> intlist;
    109     intlist.Insert(5);
    110     intlist.Insert(15);
    111     intlist.Insert(25);
    112     intlist.Insert(35);
    113 
    114     ListIterator<int> myl(intlist);
    115     if(myl.NotNull())
    116     {
    117         cout << *myl.First()*10;
    118         while(myl.NextNotNull())
    119               cout << "->" << *myl.Next()*10;
    120         cout << endl;
    121     }
    122 
    123     return 0;
    124 }
  • 相关阅读:
    星战代码小电影
    CDlinux 安装
    网络正常使用,图标状态显示不正常
    查询正在执行的SQL语句DBCCINPUTBUFFER
    如何在MYSQL下所有指定数据库名下执行SQL
    GHOST完成后出现GRUB解决方法
    MySql Cast与Convert函数
    MYSQL查询数据库表索引的硬盘空间占用
    警惕企业中的五种虚假执行力
    开启笔记本win7的虚拟热点笔记本变成wifi
  • 原文地址:https://www.cnblogs.com/yang901112/p/12493837.html
Copyright © 2020-2023  润新知