#ifndef _NODE_
#define _NODE_
#include"base.h" //一些基本输入输出的 头文件
//模板类,链表--
template<class T>
class Node
{
public:
T value;
Node<T>* prev;//前驱
Node<T>* next;//后继
Node()
{
prev=NULL;
next=NULL;
}
~Node(){}
};
template<class T>
class LinkList
{
private:
Node<T>* link;
Node<T>* real;
int len;
public:
LinkList()
{
len=0;
real=link=new Node<T>;
link->next=NULL;
link->prev=link;
}
~LinkList()
{
Node<T>* pnode,*temp;
pnode = link->next;
while(pnode)
{
temp=pnode->next;
delete pnode;
pnode=temp;
}
delete link;
link=NULL;
len =0;
}
int InitLink();
// 头 尾 随机 插 改 删 等
int PushInfoFrount(T t);
T PopInfoFrount();
int PushInfoReal(T t);
T PopInfoReal();
int InsertInfo(const int count,T t);
T DeleteInfo(const int count);
int SetInfo(const int count,T t);//修改
T GetInfo(const int count); //返回指定位置对象
int isEmpty();
//获得前驱 后继
Node<T>* Next(const int count);
Node<T>* Prev(const int count);
int GetLen();
};
template<class T>
int LinkList<T>::GetLen()
{
if(!isEmpty())
return -1;
return len;
}
template<class T>
int LinkList<T>::isEmpty()
{
if(link == NULL)
return false;
return true;
}
//初始化
template<class T>
int LinkList<T>::InitLink()
{
Node<T>* pnode,*temp;
pnode = link->next;
if(!isEmpty())
return false;
while(pnode!=link || pnode!=NULL)
{
temp=pnode->next;
delete pnode;
pnode=temp;
}
//第二种:可以使用 PopInfoFrount();
link->prev=link;
link->next=NULL;
len =0;
}
//----------------------------
//头 插 头删
template<class T>
int LinkList<T>::PushInfoFrount(T t)
{
if(!isEmpty())return 0;
Node<T>* newNode=new Node<T>;
newNode->value =t;
newNode->next=link->next;
newNode->prev=link;
//如果是第一次插入
if(len == 0)
{
link->next=newNode;
//调整尾指针 因为如果一直头插入 real永远是最后一个,如果不调整,那他永远指向Link.
real=newNode;
len++;
return true;
}
//否则...
link->next->prev=newNode;
link->next=newNode;
len ++;
return true;
}
//头 pop
template<class T>
T LinkList<T>::PopInfoFrount()
{
if( !isEmpty() || GetLen()<=0 )exit(-1);
Node<T>* pnode=link->next;
T t=pnode->value;
if(pnode->next!=NULL || pnode!=link)
pnode->next->prev=pnode->prev;
pnode->prev->next=pnode->next;//link->next = pnode->next;
delete pnode;
pnode =NULL;
len --;
//如果链表没有对象 设置尾指针
if(len == 0)
{
real=link;
}
return t;//返回对象
}
//尾插 尾删
template<class T>
int LinkList<T>::PushInfoReal(T t)
{
if(!isEmpty())return -1;
Node<T>* newNode=new Node<T>;
newNode->value=t;
newNode->next=real->next;
newNode->prev=real;
real->next=newNode;
real=newNode;
len++;
return true;
}
//尾部 pop
template<class T>
T LinkList<T>::PopInfoReal()
{
if(!isEmpty()|| GetLen()==0 ) exit(-1);
T t=real->value;
real->prev->next=real->next;
Node<T>* pnode=real;
real=real->prev;//指向前驱
delete pnode;
pnode =NULL;
len--;
return t;
}
//指定位置 插入
template<class T>
int LinkList<T>::InsertInfo(const int count,T t)
{
if(!isEmpty()|| count<=0 || count > GetLen() ) return -1;
int i=1;
Node<T>* pnode=link->next;
Node<T>* newNode=new Node<T>;
newNode->value = t;
while(pnode!=NULL)
{
if(i==count)break;
pnode=pnode->next;
i++;
}
if(pnode==NULL || i>count)return -1;
//如果是最后一个位置
if(pnode->next==NULL)
{
newNode->next=pnode->next;
newNode->prev=pnode;
pnode->next=newNode;
len++;
real=newNode;//设置尾指针
return true;
}
newNode->next=pnode->next;
newNode->prev=pnode;
pnode->next->prev=newNode;
pnode->next=newNode;
len++;
return true;
}
//给定 位置 然后删除
template<class T>
T LinkList<T>::DeleteInfo(const int count)
{
if(!isEmpty()|| GetLen()<=0 || count > GetLen()) exit(-1);
//如果是最后一个 直接PopInfoReal
if(count == GetLen())
{
return PopInfoReal();
}
//如果是头 直接PopInfoFrount;
if(count == 1)
{
return PopInfoFrount();
}
//否则执行其他位置的删除
int i=1;
T t;
Node<T>* pnode;
pnode=link->next;
while(pnode!=NULL)
{
if(i == count) break;
++i;
pnode=pnode->next;
}
if(pnode==NULL || i>count)exit(-1);
t=pnode->value;
pnode->next->prev=pnode->prev;
pnode->prev->next=pnode->next;
delete pnode;
pnode=NULL;
len--;
return t;
}
// 修改 set
template<class T>
int LinkList<T>::SetInfo(const int count,T t)
{
if(!isEmpty()|| GetLen==0 || count> GetLen())return -1;
if(count == 1)
{
link->next->value=t;return true;
}
if(count == GetLen())
{
real->value=t;return true;
}
Node<T>* pnode=link->next;
int i=1;
while(pnode)
{
if(i == count)break;
i++;
pnode=pnode->next;
}
if(pnode==NULL || i>count)return -1;
pnode->value=t;
return true;
}
//获取指定位置 然后返回value值对象
template<class T>
T LinkList<T>::GetInfo(const int count)
{
if(!isEmpty()|| GetLen()==0 || count > GetLen()) exit(-1);
if(count ==1)
return link->next->value;
if(count==GetLen())
return real->value;
int i=1;
Node<T>* pnode=link->next;
while(pnode)
{
if(i == count)break;
i++;
pnode=pnode->next;
}
if(pnode == NULL || i>count)exit(-1);
return pnode->value;
}
//获取 前驱后继 返回节点指针
template<class T>
Node<T>* LinkList<T>::Next(const int count)
{
if(!isEmpty() || count <=0 || count>GetLen())exit(-1);
int i=1;
Node<T>* pnode=link;
while(pnode)
{
if(i == count)break;
i++;
pnode =pnode->next;
}
if(pnode==NULL || i>count)exit(-1);
return pnode->next;
}
template<class T>
Node<T>* LinkList<T>::Prev(const int count)
{
if(!isEmpty() || count <=0 || count>GetLen())exit(-1);
int i=1;
Node<T>* pnode=link->next;
while(pnode)
{
if(i == count)break;
i++;
pnode =pnode->next;
}
if(pnode==NULL || i>count)exit(-1);
return pnode->prev;
}
#endif
--------------------------------
感觉是不是 太多了啊?
现在我没有干这个有关工作,明年想去试试,可是界面编程没怎么学,哎,实际工作中 一有时间 我就写代码,也没有信心去面试开发的。
不知道怎么办。反正决心是坚持走这路线的。并且 学了几年了。。一直没计划的学和发展,就写写数据结构等。没进步。
我该怎么走啊? 明年开年后 也不能把 win32或者MFC学会啊。怎么找工作 55555555
---------------------------------------------
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!