• 单链表


      1 //2016.9.6
      2 #include <iostream>
      3 #include <cstdio>
      4 
      5 using namespace std;
      6 
      7 template<class T>
      8 struct node
      9 {
     10     T date;
     11     node<T> *next;
     12     node(node<T> *p = NULL){next = p;}
     13     node(T a, node<T> *p = NULL){date = a; next = p;}
     14 };
     15 
     16 template<class T>
     17 class List
     18 {
     19 private:
     20     node<T> *head;
     21 public:
     22     List(){head = new node<T>;}
     23     List(const T& a){head = new node<T>(a);}
     24     List(List<T>& L);
     25     ~List();
     26     node<T>* get_head(){return head;}
     27     node<T>* Locate(int pos);
     28     node<T>* Search(T x);
     29     int Length();
     30     bool get_date(int pos, T& x)const;
     31     void set_date(int pos, T& x);
     32     bool Insert(int pos, T& x);
     33     bool Remove(int pos, T& x);
     34     bool Empty(){return head->next == NULL;}
     35     void output();
     36     List<T>& operator=(List<T> &L);
     37 };
     38 
     39 template<class T>
     40 List<T>& List<T>::operator=(List<T> &L)
     41 {
     42     T tmp;
     43     head = new node<T>;
     44     node<T>* p = head;
     45     node<T>* srcptr = L.get_head();
     46     while(srcptr->next != NULL)
     47     {
     48         tmp = srcptr->next->date;
     49         p->next = new node<T>(tmp);
     50         p = p->next;
     51         srcptr = srcptr->next;    
     52     }
     53     p->next = NULL;
     54     return *this;
     55 }
     56 
     57 template<class T>
     58 void List<T>::output()
     59 {
     60     node<T>* p = head->next;
     61     while(p != NULL)
     62     {
     63         cout<<p->date<<" ";
     64         p = p->next;
     65     }
     66     cout<<endl;
     67 }
     68 
     69 template<class T>
     70 List<T>::List(List<T>& L)
     71 {
     72     T tmp;
     73     head = new node<T>;
     74     node<T>* p = head;
     75     node<T>* srcptr = L.get_head();
     76     while(srcptr->next != NULL)
     77     {
     78         tmp = srcptr->next->date;
     79         p->next = new node<T>(tmp);
     80         p = p->next;
     81         srcptr = srcptr->next;
     82     }
     83     p->next = NULL;
     84 }
     85 
     86 template<class T>
     87 List<T>::~List()
     88 {
     89     node<T> *p;
     90     while(head->next != NULL)
     91     {
     92         p = head->next;
     93         head->next = p->next;
     94         delete p;
     95     }
     96 }
     97 
     98 template<class T>
     99 node<T>* List<T>::Search(T x)
    100 {
    101     node<T>* cur = head->next;
    102     while(cur->next != NULL)
    103     {
    104         if(cur->date == x)return cur;
    105         cur = cur->next;
    106     }
    107     return NULL;
    108 }
    109 
    110 template<class T>
    111 node<T>* List<T>::Locate(int pos)
    112 {
    113     if(pos < 0)return NULL; 
    114     node<T>* p = head;
    115     for(int i = 0; i < pos && p->next != NULL; i++, p = p->next)
    116     ;
    117     return p;
    118 }
    119 
    120 template<class T>
    121 int List<T>::Length()
    122 {
    123     int cnt = 0;
    124     node<T> p = head-next;
    125     while(p->next != NULL)
    126     {
    127         cnt++;
    128         p = p->next;
    129     }
    130     return cnt;
    131 }
    132 
    133 template<class T>
    134 bool List<T>::get_date(int pos, T& x)const
    135 {
    136     if(pos < 0)return false;
    137     node<T>* cur = Locate(pos);
    138     if(cur==NULL)return false;
    139     x = cur->date;
    140     return true;
    141 }
    142 
    143 template<class T>
    144 void List<T>::set_date(int pos, T& x)
    145 {
    146     if(pos < 0)return ;
    147     node<T>* cur = Locate(pos);
    148     if(cur == NULL)return;
    149     cur->date = x;
    150 }
    151 
    152 template<class T>
    153 bool List<T>::Insert(int pos, T& x)
    154 {
    155     node<T>* cur = Locate(pos);
    156     if(cur == NULL)return false;
    157     node<T>* p = new node<T>(x);
    158     if(p == NULL)exit(1);
    159     p->next = cur->next;
    160     cur->next = p;
    161     return true;
    162 }
    163 
    164 template<class T>
    165 bool List<T>::Remove(int pos, T& x)
    166 {
    167     node<T>* cur = Locate(pos-1);
    168     if(cur == NULL || cur->next == NULL)return false;
    169     node<T>* p = cur->next;
    170     cur->next = p->next;
    171     x = p->date; delete p;
    172     return true;
    173 }
    174 
    175 int main()
    176 {
    177     List<int> lis;
    178     int a;
    179     for(int i = 0; i < 10; i++)
    180     {
    181         lis.Insert(0, i);
    182     }
    183     lis.output();
    184     lis.Remove(1, a);
    185     lis.output();
    186     a = 300;
    187     lis.set_date(3, a);
    188     lis.output();
    189     List<int> lis2 = lis;
    190     lis2.output();
    191     cout<<"OK"<<endl;
    192     return 0;
    193 }
  • 相关阅读:
    日期时间检查(格式为:YYYY-MM-DD HH:MM:SS)
    日期合法性验证(格式为:YYYY-MM-DD或YYYY/MM/DD )
    [转]Attribute在.net编程中的应用
    WCF
    [转]使用C#开发ActiveX控件
    在 IIS 中承载 WCF 服务
    [转]一个完整的Installshield安装程序实例
    反射
    特性
    迭代器
  • 原文地址:https://www.cnblogs.com/Penn000/p/5847158.html
Copyright © 2020-2023  润新知