• C++类模版封装单链表


    代码如下

    View Code
      1 #include <iostream>
      2 #include <fstream>
      3 #include <sstream> 
      4 
      5 using namespace std;
      6 class Student
      7 {
      8 public:
      9     int sId;
     10     char sName[10];
     11 };
     12 
     13 //申明模版类
     14 template <typename T>
     15 class Link
     16 {
     17 private:
     18     Link * pHead;
     19     Link * pCur;
     20     Link * pPrev;
     21     Link * pNext;
     22     T node;
     23     int iSize;
     24 public:
     25     Link()
     26     {
     27         pHead = NULL;
     28         pCur = NULL;
     29         pPrev = NULL;
     30         iSize = 0;
     31     }
     32     void push(T& node);
     33     int deleteNode(T& node);
     34     T searchNode(T& node);
     35 };
     36 
     37 //定义类模版函数
     38 template<class T>
     39 void Link<T>::push(T& node)
     40 {
     41     if(pHead == NULL)
     42     {
     43         pCur = new Link;
     44         pCur->pNext = NULL;
     45         pHead = pCur;
     46         pPrev = pHead;
     47     }
     48     else
     49     {
     50         pCur = new Link;
     51         pCur->pNext = NULL;
     52 
     53         pPrev->pNext = pCur;
     54         pPrev = pCur;
     55     }
     56     pCur->node = node;
     57     iSize ++;
     58 }
     59 
     60 template<class T>
     61 int Link<T>::deleteNode(T& node)
     62 {
     63     int flag = 0;
     64     Link *pTemp = pHead;
     65     Link *pPrev = pHead;
     66     while(pTemp != NULL)
     67     {
     68         if(pTemp->node.sId == node.sId)
     69         {
     70             if(pTemp == pHead)
     71             {
     72                 pHead = pHead->pNext;
     73             }
     74             else if(pTemp->pNext == NULL)
     75             {
     76                 pPrev->pNext = pTemp->pNext;
     77             }
     78             else
     79             {
     80                 pPrev->pNext = pTemp->pNext;
     81             }
     82             flag = 1;
     83         }
     84         if(pTemp == pHead)
     85         {
     86             pPrev = pHead;
     87         }
     88         else
     89         {
     90             pTemp = pTemp->pNext;
     91             pPrev = pPrev->pNext;
     92         }
     93     }
     94     iSize --;
     95     return flag;
     96 }
     97 
     98 template<class T>
     99 T Link<T>::searchNode(T& node)
    100 {
    101     Link *pTemp = pHead;
    102     Link *pPrev = pHead;
    103     while(pTemp != NULL)
    104     {
    105         if(pTemp->node.sId == node.sId)
    106         {
    107             return pTemp->node;
    108         }
    109         pTemp = pTemp->pNext;
    110     }
    111 }
    112 
    113 void operator <<(ostream&,Student s)
    114 {
    115     cout<<s.sId<<" "<<s.sName<<endl;
    116 }
    117 
    118 int main()
    119 {
    120     Student s1,s2,temp;
    121     s1.sId = 10;
    122     strcpy(s1.sName,"xxx");
    123     s2.sId=2;
    124     strcpy(s2.sName,"jack");
    125     Link<Student> link;
    126     link.push(s1);
    127     link.push(s2);
    128     temp = link.searchNode(s2);
    129     cout<<temp;
    130     cout<<temp.sName<<endl;
    131     return 0;
    132 }

    s

  • 相关阅读:
    公安的方案特点。
    12345
    js发送邮件 不会调用客户端。
    jsonp 跨域 jsonp 发音
    RESTful restful api Representational State Transfer
    Autofac 组件、服务、自动装配 《第二篇》
    Fiddler关闭自动更新
    武大樱花抢票软件使用说明
    Visual Studio实用小技巧
    C#6.0语法特性
  • 原文地址:https://www.cnblogs.com/jiese/p/2578357.html
Copyright © 2020-2023  润新知