链表的C++实现
2016-04-10 11:23
441 查看
链表的C++实现
数组中插入一个元素或者删除一个元素时,必须移动数组中的元素,从而使动态列表的顺序存储低效。链表可以解决这一问题,它由数据和一个指向下一个节点的指针组成。基本的操作有构造、判空、插入、删除和遍历。构造
令头结点head=null。
判空
判断 head==null?
插入
插入可以分别三种情况:1.列表为空;2.当前元素值比头结点的元素值小,该节点作为头结点;3.在链表中某一元素后面插入
删除
删除可以分为四种情况:1.链表为空;2.删除头结点;3.删除链表中一个不是头结点的元素;4.遍历到最后一个节点,还没找到,那么就是链表中没有要删除的节点。
遍历
遍历分两种情况:1.链表为空;2.向后遍历,知道当前节点不是NULL。
程序如下:
#include <iostream> using namespace std; template<typename DataType> class List { public: List(); bool empty() const; void Insert(DataType & value); void Delete(DataType & item); void Display()const; public: class node { public: node(){ next = NULL; } public: DataType data; node* next; }; private: node* head; }; template<typename DataType> List<DataType>::List() { head = NULL; } template<typename DataType> bool List<DataType>::empty()const { return (head == NULL); } template<typename DataType> void List<DataType>::Insert(DataType & value) { node* n = new node; n->data = value; if (empty()) head = n; else { node* p = head; node* pre = NULL; if (value<=p->data) { n->next = p; head = n; } else { while (p != NULL&&value>p->data) { pre = p; p = p->next; } n->next = p; pre->next = n; } } } template<typename DataType> void List<DataType>::Delete(DataType & item) { if (empty()) cout << "List is empty!" << endl; else { if (item==head->data) { head = head->next; delete head; } else { node* p = head; node* pre = NULL; while (p != NULL&&p->data != item) { pre = p; p = p->next; } if (p != NULL) { pre->next = p->next; delete p; } else cout << "Item does not exist in the List!" << endl; } } } template<typename DataType> void List<DataType>::Display()const { if (empty()) cout << "List is empty!" << endl; else { node* p = head; while (p!=NULL) { cout << p->data << " "; p = p->next; } } }
相关文章推荐
- C++中public,protected,private派生类继承问题和访问权限问题
- Ubuntu环境下编译so-jni调用c语言
- 《高质量C++/C编程指南》读书笔记三
- opencl:C++11下使用别名(x,y,z,hi,lo...)访问vector类型(cl_int2,cl_long16...)的元素
- C语言学习018:strdup复制字符串数组
- C++获取某一任意字符串每一个字符连续出现次数并打印在控制台上
- C++需要注意的地方
- C语言函数判断
- C++数据类型范围
- C语言学习017:malloc和free
- C++实现队列
- C++:类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)
- c++基本应用
- C语言字符串转换为oc
- C++STL容器的基本特性和原理
- C++中类的声明与其成员函数的定义分离--以提高类的复用性
- 扫描线算法填充五角星
- C++作业3
- 取绝对值(in c语言)
- C++作业3