单链表(C++模板类)
来源:互联网 发布:单片机的编程语言 编辑:程序博客网 时间:2024/05/22 17:18
list.h:
#ifndef LIST_CLA_H#define LIST_CLA_Htemplate <typename T>class List;template <typename T>class Node{public: friend class List<T>; Node(T i);private: T value; Node* next;};template <typename T>class List{public: List(); ~List(); void clear(); void append(T i); void insert(int position, T x); T at(int i); void removeAt(int i); void remove(T x); int size()const;private: Node<T>* header;};#include "list_def.h"#endif // !LIST_H
list_def.h:
#include "list.h"#ifndef LIST_DEF_H#define LIST_DEF_Htemplate<typename T>Node<T>::Node(T i) :value(i), next(nullptr){}template<typename T>List<T>::List(){ header = new Node<T>(0);}template<typename T>List<T>::~List(){ clear(); delete header; header = nullptr;}template<typename T>void List<T>::clear(){ Node<T>* p = header; while (p != nullptr && p->next != nullptr) { p = p->next; header->next = p->next; delete p; p = header; }}template<typename T>void List<T>::append(T i){ Node<T> *n = new Node<T>(i); Node<T> *p = header; while (p->next != nullptr) { p = p->next; } p->next = n;}template<typename T>void List<T>::insert(int position, T x){ Node<T>* p = header; for (int n = 0; n < position && p->next != nullptr; ++n) { p = p->next; } Node<T>* t = new Node<T>(x); t->next = p->next; p->next = t;}template<typename T>T List<T>::at(int i){ Node<T>* p = header; for (int n = 0; n <= i && p->next != nullptr; ++n) { p = p->next; } return p->value;}template<typename T>void List<T>::removeAt(int i){ Node<T>* p = header; for (int n = 0; n < i && p->next != nullptr; ++n) { p = p->next; } Node<T>* tp = p; p = p->next; tp->next = p->next; delete p; p = nullptr;}template<typename T>inline void List<T>::remove(T x){ Node<T>* p = header; while(p->next) { if (p->next->value == x) { Node<T>* tp = p; p = p->next; tp->next = p->next; delete p; p = nullptr; break; } p = p->next; }}template<typename T>int List<T>::size()const{ Node<T>* p = header; int n = 0; while (p->next != nullptr) { p = p->next; n++; } return n;}#endif // !LIST_DEF_H
main.cpp:
#include <iostream>#include "list.h"using namespace std;int main(){ List<int> list; for (int i = 2; i < 100; i += 2) list.append(i); for (int i = 0; i < list.size(); ++i) cout << list.at(i) << " "; cout << endl; List<double> list1; for (double i = 2.3; i < 100; i += 2.1) list1.append(i); for (int i = 0; i < list1.size(); ++i) cout << list1.at(i) << " "; cout << endl; system("pause"); return 0;}
阅读全文
0 0
- 类模板与模板类(C++)
- 数据结构(C++)----单链表模板类
- Linux C/C++ 模板:类模板(主模板)
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- 数据结构之单链表C++(模板)
- View类通用模板(C#)
- 数据结构(c++)最小堆模板类
- (C++)堆栈的类模板
- c++vector模板类
- c++vector模板类
- c++:类模板
- [C++]类模板
- C++:类模板
- 【c++】类模板
- 什么是多域名通配符SSL证书?
- mysql 索引
- js原型和原型链总结
- 炼数成金 Streams流计算引航公开课附讲义
- Ubuntu14.04调教手册(安装中文输入法等)
- 单链表(C++模板类)
- 算法架构系列活动—大数据风控技术应用
- 自动寻路方案
- 在vue中如何引入element-ui
- python串口通信,pyserial安装
- IntelliJ IDEA2017.3激活
- 大数据24小时:网传万达云多个部门面临解散,阿里云与众安科技发布新金融营销平台“芭蕉扇”
- Android 集成微信支付
- win10 显示 “在此处打开命令窗口”菜单选项