单链表各种操作,VS2013+番茄插件写着真爽
2016-03-28 23:02
351 查看
//************************************************************************ // 链表的各种操作2 //************************************************************************ //第一步,定义节点类 template<class T> class slistNode { public: slistNode(){ next = NULL; }//初始化 T data;//值 slistNode* next;//指向下一个节点的指针 }; //第二步,写单链表类的声明,包括属性和方法。 template<class T> class myslist { private: unsigned int listlength; slistNode<T>* node;//临时节点 slistNode<T>* lastnode;//尾结点 slistNode<T>* headnode;//头节点 public: myslist();//初始化 unsigned int length();//链表元素的个数 void add(T x);//表尾添加元素 void traversal();//遍历整个链表并打印 bool isEmpty();//判断链表是否为空 slistNode<T>* find(T x);//查找第一个值为x的节点,返回节点的地址,找不到返回NULL void Delete(T x);//删除第一个值为x的节点 void insert(T x, slistNode<T>* p);//在p节点后插入值为x的节点 void insertHead(T x);//在链表的头部插入节点 }; //第三步,写构造函数,初始化链表类的属性。 template<class T> myslist<T>::myslist() { node = NULL; lastnode = NULL; headnode = NULL; listlength = 0; } //第四步,实现add()方法。 template<class T> void myslist<T>::add(T x){ node = new slistNode<T>(); node->data = x; if (lastnode == NULL){ headnode = node; lastnode = node; } else{ lastnode->next = node; lastnode = node; } ++listlength; } //第五步,实现traversal()函数,遍历并输出节点信息。 template<class T> void myslist<T>::traversal(){ node = headnode; while (node!=NULL) { cout << node->data << ' '; node = node->next; } cout << endl; } //第六步,实现isEmpty()函数,判断链表是否为空,返回真为空,假则不空。 template<class T> void myslist<T>::isEmpty(){ return listlength == 0; } //第七步,实现find()函数。 template<class T> slistNode<T>* myslist<T>::find(T x){ node = headnode; while (node!=NULL && node->data!=x) { node = node->next; } return node; } //第八步,实现delete()函数,删除第一个值为x的节点 template<class T> void myslist<T>::Delete(T x){ slistNode<T> * temp = headnode; if (temp == NULL){ return; } if (temp->data == x){ headnode = temp->next; if (temp->next == NULL){ lastnode = NULL; } delete(headnode); } while (temp->next!=NULL && temp->next->data!=x ){ temp = temp->next; } if (temp->next == NULL){ return; } if (temp->next == lastnode){ lastnode = temp; delete(temp->next); temp->next = NULL; } else{ node = temp->next; temp->next = node->next; delete(node); node = NULL; } } //第九步,实现insert()和insertHead()函数,在p节点后插入值为x的节点。 template<class T> void myslist<T>::insertHead(T x){ node = new slistNode<T>(); node->data = x; node->next = headnode; headnode = node; } template<class T> void myslist<T>::insert(T x, slistNode<T>* p){ if (p == NULL){ return; } node = new slistNode<T>(); node->data = x; node->next = p->next; p->next = node; if (p->next == NULL){ lastnode = node; } }
相关文章推荐
- MyBatis关于识别器和缓存的简单理解
- 面试准备
- hdu-5637 Transform(位运算+bfs)
- linux下安装JDK和tomcat以及遇到的误区
- 【学习笔记】高性能MySQL(第三版)——第2章:MySQL基准测试
- Linux网络属性配置
- [JSTDG]JavaScript函数
- 大整数乘法-分治
- Spark-Mllib(一)数据类型
- HDOJ 2046 骨牌铺方格
- 2016春季练习——bfs简单题
- 三子棋游戏(c语言实现)
- 使用 Cocos2d-x 和粒子编辑器实现场景特效
- Oracle-04-用SQL*PLUS创建用户&新用户授权等
- Serializable和Parcelable
- iOS 富文本属性
- 复利计算器的单元测试结果
- Self-Paced Training (3) - Docker Operations
- 2016.03.28(心疼)
- android ContentProviders