单链表模板类
来源:互联网 发布:淘宝管控记录 编辑:程序博客网 时间:2024/05/15 23:44
链表是最基本的数据结构,是一组不连续的数据的集合,链表中每个结点除包含结点元素外,还包含下一结点的地址。对链表可以实现插入、删除、查找以及显示等操作。
/* * 单链表模板类List.h */ #ifndef _LIST_H_#define _LIST_H_#include <iostream>using namespace std;template <class TYPE>class List{public: List(); List(TYPE x[], int n); List(const List<TYPE> *l); ~List(); void insert(const TYPE &x); bool remove(const TYPE &x); void display() const; int size() const; int at(int x, TYPE &k) const;private: struct ListNode { TYPE data; ListNode *next; }; ListNode *list; void insert(ListNode *&l, const TYPE &x); bool remove(ListNode *&l, const TYPE &x); void display(ListNode *l) const; int size(ListNode *l) const; int at(ListNode *l, int x, TYPE &k) const;};#endif// 构造函数template <class TYPE>List<TYPE>::List(){ list = new ListNode; list->next = NULL;}// 利用数组初始化链表template <class TYPE>List<TYPE>::List(TYPE x[], int n){ list = new ListNode; list->next = NULL; for(int i = 0; i < n; ++i) { insert(list, x[i]); }}// 利用链表初始化链表template <class TYPE>List<TYPE>::List(const List<TYPE> *l){ if(l->list == NULL) list = NULL; else { ListNode *p = l->list->next; ListNode *pt = list = new ListNode; while(p) { ListNode *q = new ListNode; q->data = p->data; q->next = NULL; pt->next = q; pt = q; p = p->next; } }}// 析构函数template <class TYPE>List<TYPE>::~List(){ List *p = list->next; while(p) { list->next = p->next; free(p); p = list->next; }}// 外部调用插入数据方法template <class TYPE>void List<TYPE>::insert(const TYPE &x){ insert(list, x);}// 内部调用向List插入数据template <class TYPE>void List<TYPE>::insert(ListNode *&l, const TYPE &x){ ListNode *node = new ListNode; node->data = x; node->next = l->next; l->next = node;}// 删除值为x的,删除成功返回true,失败返回falsetemplate <class TYPE>bool List<TYPE>::remove(const TYPE &x){ remove(list, x);}template <class TYPE>bool List<TYPE>::remove(ListNode *&l, const TYPE &x){ if(l == NULL) return false; ListNode *p = l->next; ListNode *pre = l; while(p && p->data != x) { pre = p; p = p->next; } if(p) { pre->next = p->next; delete p; } return true;}// 打印链表元素template <class TYPE>void List<TYPE>::display() const{ display(list);}template <class TYPE>void List<TYPE>::display(ListNode *l) const{ if(l != NULL) { ListNode *p = l->next; if(p == NULL) { cout << "链表为空!" << endl; return; } while(p) { cout << p->data << " "; p = p->next; } } else cout << "链表不存在!" << endl;}// 返回链表中元素个数template <class TYPE>int List<TYPE>::size() const{ size(list);}template <class TYPE>int List<TYPE>::size(ListNode *l) const{ int s = 0; if(l != NULL) { ListNode *p = l->next; while(p) { s++; p = p->next; } } return s;}/* * 根据索引值取链表中的元素 * 如果索引值大于链表的大小返回-1 * 否则将索引值处结点的值保存在k中并返回1 */template <class TYPE>int List<TYPE>::at(int x, TYPE &k) const{ return at(list, x, k);}template <class TYPE>int List<TYPE>::at(ListNode *l, int x, TYPE &k) const{ if(size(l) < x || x <= 0) { return -1; } else { int i = 0; ListNode *p = l->next; while(p && i < x) { p = p->next; i++; } k = p->data; } return 1;}
- 单链表的模板类
- 类模板之单链表
- 单链表 类模板实现
- 单链表 模板类
- 单链表模板类
- 函数模板、类模板
- 模板 - 类模板
- 模板函数,模板类
- 模板的模板类
- 类模板(函数模板)
- 模板之---类模板
- C++模板:模板类
- 函数模板 类模板
- 函数模板、类模板
- C++ 单链表的模板类
- C++类模板实现单链表
- C++之单链表模板类
- C++类模板实现单链表
- 获取 UITableViewCell 位置
- 圖像細化(骨架化)算法 分析
- Hadoop学习笔记(一)HBase脚本分析(二)hbase-daemon.sh
- Android ProgressBar 史上最强大讲解
- 搭建小型搜索引擎---原理及工具
- 单链表模板类
- canny 算子實現圖像邊緣檢測(詳細過程附源碼)
- 2012暑假学习计划
- Android 菜单(OptionMenu)大全 建立你自己的菜单
- 堆与堆排序
- 5月24日 – 6月11日 CUDA编程学习笔记
- Windows中的坐标系总结
- 多进程调用winrar
- Jboss7.1 final部署EJB3.0简单教程