C++实现线形链表
2007-07-28 15:05
295 查看
LinkList.h
#ifndef LINKLIST_H
#define LINKLIST_H
template<class ElemType>
class LinkList
...{
public:
LinkList(); //Init
~LinkList(); //Uninit
void insert(int i, ElemType e); //Insert
void erase(int i); //Delete
ElemType &operator[](int i); //Get
void for_each(void (*visit)(ElemType &)); //For each
struct node
...{
ElemType data;
node *next;
};
class bad_pos...{}; //异常类:错误的下标
private:
node *head;
};
#include "LinkList.cpp"
#endif
LinkList.cpp
#ifndef LINKLIST_CPP
#define LINKLIST_CPP
#include <cstdlib>
#include <stack>
#include "LinkList.h"
template<class ElemType>
LinkList<ElemType>::LinkList()
...{
head = new node; //建立头指针
head->next = 0;
}
template<class ElemType>
LinkList<ElemType>::~LinkList()
...{
node *p = head;
std::stack<node *> s;
while(p) //元素指针入栈
...{
s.push(p);
p = p->next;
}
while(!s.empty()) //释放元素
...{
delete s.top();
s.pop();
}
}
template<class ElemType>
void LinkList<ElemType>::insert(int i, ElemType e)
...{
node *prior;
node *in = new node;
node *next;
for(prior = head; prior && i; prior = prior->next, i--)
;
if(!prior || i) throw bad_pos();
next = prior->next;
prior->next = in;
in->data = e;
in->next = next;
}
template<class ElemType>
void LinkList<ElemType>::erase(int i)
...{
node *prior;
node *er;
node *next;
for(prior = head; prior && i; prior = prior->next, i--)
;
if(!prior || i) throw bad_pos();
if(!(er = prior->next)) throw bad_pos();
next = er->next;
prior->next = next;
delete er;
}
template<class ElemType>
ElemType &LinkList<ElemType>::operator[](int i)
...{
node *p;
for(p = head->next; p && i; p = p->next, i--)
;
if(!p || i) throw bad_pos();
return p->data;
}
template<class ElemType>
void LinkList<ElemType>::for_each(void (*visit)(ElemType &))
...{
for(node *p = head->next; p; p = p->next)
visit(p->data);
}
#endif
#ifndef LINKLIST_H
#define LINKLIST_H
template<class ElemType>
class LinkList
...{
public:
LinkList(); //Init
~LinkList(); //Uninit
void insert(int i, ElemType e); //Insert
void erase(int i); //Delete
ElemType &operator[](int i); //Get
void for_each(void (*visit)(ElemType &)); //For each
struct node
...{
ElemType data;
node *next;
};
class bad_pos...{}; //异常类:错误的下标
private:
node *head;
};
#include "LinkList.cpp"
#endif
LinkList.cpp
#ifndef LINKLIST_CPP
#define LINKLIST_CPP
#include <cstdlib>
#include <stack>
#include "LinkList.h"
template<class ElemType>
LinkList<ElemType>::LinkList()
...{
head = new node; //建立头指针
head->next = 0;
}
template<class ElemType>
LinkList<ElemType>::~LinkList()
...{
node *p = head;
std::stack<node *> s;
while(p) //元素指针入栈
...{
s.push(p);
p = p->next;
}
while(!s.empty()) //释放元素
...{
delete s.top();
s.pop();
}
}
template<class ElemType>
void LinkList<ElemType>::insert(int i, ElemType e)
...{
node *prior;
node *in = new node;
node *next;
for(prior = head; prior && i; prior = prior->next, i--)
;
if(!prior || i) throw bad_pos();
next = prior->next;
prior->next = in;
in->data = e;
in->next = next;
}
template<class ElemType>
void LinkList<ElemType>::erase(int i)
...{
node *prior;
node *er;
node *next;
for(prior = head; prior && i; prior = prior->next, i--)
;
if(!prior || i) throw bad_pos();
if(!(er = prior->next)) throw bad_pos();
next = er->next;
prior->next = next;
delete er;
}
template<class ElemType>
ElemType &LinkList<ElemType>::operator[](int i)
...{
node *p;
for(p = head->next; p && i; p = p->next, i--)
;
if(!p || i) throw bad_pos();
return p->data;
}
template<class ElemType>
void LinkList<ElemType>::for_each(void (*visit)(ElemType &))
...{
for(node *p = head->next; p; p = p->next)
visit(p->data);
}
#endif
相关文章推荐
- c++实现双向链表的常用功能
- 数据结构学习系列二-链表的C++实现
- C++ List 双向链表 实现 会用也要会写
- C++实现单链表
- C++ 实现链表常用功能
- 反转链表 C++实现
- 【C++数据结构学习笔记---线性表】用单链表实现线性表
- C++实现单链表
- C++实现顺序表和单链表
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
- 深入解析C++的循环链表与双向链表设计的API实现
- 《数据结构之链表篇》--单向链表的C++实现
- c++版链表实现
- C++利用链表模板类实现一个简易队列
- 使用C++链表来实现二叉树的存储和基本操作
- C++ 构造双向链表的实现代码
- C++实现封装链表
- [转]C++实现双向链表
- C++ 数据结构链表的实现代码
- 使用C++实现的双向链表