数据结构c++实现----单链表
2013-10-09 15:45
393 查看
大二新开数据结构课了,我把我写的代码粘上来
我的代码会参考网上很多大神的代码,但绝不是抄袭,还有..........起名字是个很大的问题,我英语水平不高啊,所以各位不要纠结于各个函数的名字啊
单链表,错误处请指正,谢谢
// head.h
// singlelist.cpp
// mian.cpp 测试
我的代码会参考网上很多大神的代码,但绝不是抄袭,还有..........起名字是个很大的问题,我英语水平不高啊,所以各位不要纠结于各个函数的名字啊
单链表,错误处请指正,谢谢
// head.h
/*************************************** *这个node节点可以反复使用 *本来,我想用继承,但无法实现。又在类里定义node,但操作麻烦,前后指针操作都要使用函数 *最后确定用 友员 *修改时间: 2013 09 25 23:50 ****************************************/ #ifndef HEAD #define HEAD #include<iostream> using namespace std; template<typename T> class SingleList; template <typename T> class LinkNode { public: friend class SingleList<T>; LinkNode(); LinkNode( const T &elem); //~LinkNode();用不到 private: T data; LinkNode<T> *pPre; LinkNode<T> *pNext; }; template <typename T> LinkNode<T>::LinkNode():pPre(NULL),pNext(NULL) { //用于初始化头结点,data用不到。 } template <typename T> LinkNode<T>::LinkNode( const T &elem):data(elem),pPre(NULL),pNext(NULL) { //初始化其余元素 } #endi
// singlelist.cpp
#include"head.h" template<typename T> class SingleList { public: SingleList(); ~SingleList(); int Length(); bool IsEmpty(); bool Insert( const T &elem , int index); bool InsertEnd( const T &elem); bool Delete( const T &elem); bool Updata( const T &elem, int index); int Select( const T &elem); //查找失败返回零 bool Get( int index ,T &elem); // 若成功 有elem 带回索引值 void Clear(); private: LinkNode<T> *pHead; int Size; }; template <typename T> SingleList<T>::SingleList():Size(0) { pHead = new LinkNode<T>; } template <typename T> SingleList<T>::~SingleList() { if( IsEmpty()){ delete pHead; } else{ Clear(); delete pHead; } } template <typename T> int SingleList<T>::Length() { return Size; } template <typename T> bool SingleList<T>::IsEmpty() { if( 0 == Length()){ return true; } else{ return false; } } template <typename T> bool SingleList<T>::Insert(const T &elem, int index) { if( Length() < index ){ return false; } int i; LinkNode<T> *q,*p = pHead; for(i=1;i<index;i++){ p = p->pNext; } q = p->pNext; p->pNext = new LinkNode<T>( elem ); p->pNext->pNext = q; Size++; //尺寸增加 勿忘 return true; } template <typename T> bool SingleList<T>::InsertEnd(const T &elem) { LinkNode<T> *p = pHead; while( p->pNext ){ p = p->pNext; } p->pNext = new LinkNode<T>( elem ); Size++; return true; } template <typename T> bool SingleList<T>::Delete(const T &elem) { LinkNode<T> *q,*p = pHead->pNext; while( p && p->data != elem){ //防止访问超界,顺序判断顺序注意 q = p; p = p->pNext; } if(!p){ return false; } q->pNext = p->pNext; delete p; Size--; return true; } template <typename T> bool SingleList<T>::Updata(const T &elem, int index) { if( Length() < index ){ return false; } int i; LinkNode<T> *q,*p = pHead; for( i=0;i<index;i++){ p = p->pNext; } p->data = elem; } template <typename T> int SingleList<T>::Select(const T &elem) //查找到返回位置,查找不到返回零 { LinkNode<T> *p = pHead->pNext; int i=1; while( p && p->data != elem){ i++; p = p->pNext; } if(!p){ return 0; } return i; } template <typename T> bool SingleList<T>::Get( int index ,T &elem ) { if( Length() < index ){ return false; } int i; LinkNode<T> *p = pHead; for(i=0;i<index;i++){ p = p->pNext; } elem = p->data; return true; } template <typename T> void SingleList<T>::Clear() { LinkNode<T> *q,*p = pHead->pNext; pHead->pNext = NULL; while( p ){ q = p; p = p->pNext; delete q; } Size = 0; }
// mian.cpp 测试
#include"head.h" #include"SingleList.cpp" int main() { SingleList<int> slist; slist.InsertEnd(44); slist.InsertEnd(88); slist.InsertEnd(11); slist.InsertEnd(33); slist.InsertEnd(22); slist.Insert( 66,1); cout<<slist.Select(66)<<endl; cout<<slist.Select(44)<<endl; int t; slist.Get(1,t); cout<<t<<endl; cout<<slist.Length()<<endl; //cout<<slist.Delete(99)<<endl; //cout<<slist.Select(22)<<endl; //cout<<slist.Select(44)<<endl; }
相关文章推荐
- 数据结构C++单链表的实现
- 单链表的c++实现(参考浙大数据结构公开课)
- 数据结构单链表的各种操作C++实现
- c/c++ 数据结构-线性表(链式表示&实现&单链表定义&实现)
- 【C++数据结构】几种单链表的模类板实现及基本操作
- 数据结构学习第一篇--C++实现单链表模板
- 【数据结构】用C++实现单链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 【c++版数据结构】之单链表的实现(带头结点以及尾节点)
- 数据结构_树_赫夫曼树及赫夫曼编码_C++实现
- 数据结构(7)线性表之链表C++实现差集
- 单链表的C++实现(采用模板类)
- 数据结构C++实现---栈
- 数据结构之C/C++实现3个插入类排序
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 数据结构 - 判断单链表是否有环(C++)
- 左神的书——《程序员代码面试指南》之逆置单链表的部分节点 c++实现
- 数据结构中单链表的实现+单链表的C语言实现源代码
- 数据结构_串_用链表做存储结构实现KMP算法_C++实现
- 数据结构 链表的lua实现 仿照C++中list 实现
- 【C++】单链表的实现