21xrx.com
2025-03-18 15:26:12 Tuesday
文章检索 我的文章 写文章
C++一本通第1037页
2023-07-05 21:37:45 深夜i     9     0
C++ 一本通 1037页 操作符重载 函数模板

《C++一本通》是一部深入浅出、系统全面的C++学习教材,已经成为广大程序员必备的参考书之一。在该书的第1037页,我们可以看到一些关于支持一般数据类型的链表的示例代码。下面,我们来详细了解一下这些代码。

在支持一般数据类型的链表中,我们需要在链表结构中加入一个新数据类型的存储结构,以适配不同数据类型的存储需求。在代码实现中,我们首先需要定义一个新的结构体:

struct node 

  T data; 

  node *next; 

}; 

其中,T为新数据类型的占位符。这样,我们就可以使用该结构体来定义支持一般数据类型的链表了:

template

class linklist 

private: 

  node *head,*tail; 

public: 

  linklist(); 

  void add(T t); 

  void modify(T olddata,T newdata); 

  void display(); 

}; 

在这段代码中,我们使用了模板类(class template)。模板类是一种通用的类或函数,可以用来指定不同类型的数据,从而避免了写多个同样的代码的麻烦。模板类中的T表示任意一种数据类型。

接下来,我们需要实现链表各种操作的函数。首先是链表的构造函数:

template

linklist ::linklist() 

  head=tail=NULL; 

在该函数中,我们使用了空指针来初始化链表。

然后是链表新元素的插入函数:

template

void linklist ::add(T t) 

  node *p=new node; 

  p->data=t; 

  p->next=NULL; 

  if(head==NULL) 

    head=tail=p; 

  else 

    tail->next=p; 

    tail=p; 

}

在这段代码中,我们先定义一个新结点,将新数据存入新结点data中,然后将新结点加入到链表的末尾。如果链表为空,将head和tail都指向新结点,否则将新结点加到链表尾部。

接下来是链表元素修改的函数:

template

void linklist ::modify(T olddata,T newdata) 

  node *p=head; 

  while(p) 

  { 

    if(p->data==olddata) 

      p->data=newdata; 

    p=p->next; 

  } 

在该函数中,我们先从链表头开始遍历链表,寻找被修改的元素。当找到该元素时,将其data改为新数据。

最后是链表元素显示的函数:

template

void linklist ::display() 

  node *p=head; 

  while(p) 

    cout< data<<" "; 

    p=p->next; 

  cout<

在该函数中,我们同样从链表头开头遍历链表,输出链表中的数据。

通过以上代码实现,我们就实现了支持一般数据类型的链表。在实际编程过程中,可以根据需要对上述代码进行更改和优化,以适配不同的应用场景。

  
  

评论区

请求出错了