您的位置:首页 > 其它

单链表各种操作,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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: