zoukankan      html  css  js  c++  java
  • 模板类实现链表

    【原创】

    我们在很多情况下会遇到这样的情况,比如说,一个链表,他的数据类型有int,char,double等,这个时候我们可能直观的理解就是建立多个struct Node{};这样固然能狗解决问题,但是这并不可取,太过死板,这时候利用c++中的模板,可以很好的解决这一问题;关于模板那里的东西,可以查看相关的书籍,下面直接给出一份可用代码,注意查看main函数中的操作,十分的方便

     1 #include <iostream>
     2 using namespace std;
     3 template <class T>
     4 class List{
     5 public:
     6     List();
     7     void Add(T&);//说明T是一种数据类型
     8     void Remove(T&);
     9     void PrintList();
    10     ~List();
    11 protected:
    12     struct Node{
    13         Node *pNext;
    14         T data;//说明T了
    15     };
    16     Node *pHead;//指向链表头节点的指针;
    17 };
    18 //对成员函数的实现
    19 template <class T>
    20 List<T>::List(){
    21     pHead = NULL;
    22 }
    23 template <class T>
    24 void List<T>::Add(T& t){//这是成员函数,能够访问类中的成员数据
    25     Node *temp = new Node;
    26     temp->data = t;
    27     temp->pNext = pHead;
    28     pHead = temp;//该对象的头指针作出了改变
    29 }
    30 template <class T>
    31 void List<T>::Remove(T& t){
    32     Node* q = 0;
    33     if (pHead->data==t) {//删除的是头节点
    34         q = pHead;
    35         pHead = pHead->pNext;
    36     }else{
    37         for(Node *p=pHead;p->pNext;p=p->pNext){
    38             if (p->pNext->data==t) {
    39                 q = p->pNext;
    40                 p->pNext = q->pNext;
    41                 break;
    42             }
    43         }
    44     }
    45     if (q) {
    46         delete q;
    47     }
    48 }
    49 template<class T>
    50 void List<T>::PrintList(){
    51     for (Node* p = pHead; p; p=p->pNext) {
    52         cout<<(p->data)<<"  ";
    53     }
    54     cout<<endl;
    55 }
    56 template <class T>
    57 List<T>::~List(){
    58     Node *p;
    59     while (pHead!=NULL) {
    60         p = pHead;
    61         pHead = pHead->pNext;
    62         delete p;
    63     }
    64 }
    65 int main() {
    66     List<int> intList;
    67     int a[10] = {1,2,3,4,5,6,7,8,9,10};
    68     List<char> charList;
    69     for (int i = 0; i<sizeof(a)/sizeof(int); i++){
    70         intList.Add(a[i]);
    71         char b = 'a'+a[i];
    72         charList.Add(b);
    73     }
    74     intList.PrintList();
    75     charList.PrintList();
    76     int m;
    77     cin>>m;
    78     intList.Remove(m);
    79     char c = 'a'+m;
    80     charList.Remove(c);
    81     intList.PrintList();
    82     charList.PrintList();
    83     
    84     return 0;
    85 }
  • 相关阅读:
    一幅图弄清DFT与DTFT,DFS的关系
    NOIp2021 原地退役记
    redis发布订阅实现各类定时业务(优惠券过期,商品不支付自动撤单,自动收货等)
    大家好。
    C#如何实现用socket建立并发服务器模型?
    请大家给我介绍几本书
    用socket封装ftp类。
    WAP协议分析(1)
    获取各科最高两个成绩的解决方案。
    如何向后台数据库中插入多条记录?
  • 原文地址:https://www.cnblogs.com/numen-fan/p/6547327.html
Copyright © 2011-2022 走看看