List.链表(增删改查)
2013-04-26 22:48
162 查看
typedef int T;
class List{
struct Node{
T data;
Node* next;
Node(const T& d,Node* next=NULL):data(d),next(next){}
};
Node* head;
int len;
public:
~List(){clear();}
List():head(),len(){}
int size const{
return len;
}
void travel() const{
Node* p = head;
while(p){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
}
void clear(){
Node* p = head,*q;
while(p){
q = ->next;
delete p;
p = q;
}
head = NULL,len = 0;
}
Node*& getptr(int n){
if(n<0 || n>len) n=len;
if(n == 0){
return head;
}
Node* p = head;
for(int i=1;i<n;i++){
p = p->next;
}
reurn p->next;
}
void insert(const T& d,int n){
Node*& p=getptr(n);
Node* q = new Node(d,p);
p = q;
++len;
}
void erase(int n){
Node*& p = getptr(n);
if(p){
Node* q = p;
p = p->next;
delete q;
--len;
}
}
void remove(const T& d){
Node*& p = find(d);
if(p){
Node* q = p;
p = p->next;
delete q;
--len;
}
}
Node*& find(const T& d){
if(len==0 || head->data==d)
return head;
Node* p = head;
while(p->next && p->next->data!=d)
p = p->next;
return p->next;
}
void update(const T& oldv,const T& newv){
Node* p = find(oldv);
if(p){
p->data = newv;
}
}
//对 [ ] 的重载
T& operator[](int index) throw(const char*){
if(index<0 || index>=len) throw "x";
return getptr(index)->data;
}
};
PS:一个班里的舍友回学校了,孤身一人在帝都,加油!
class List{
struct Node{
T data;
Node* next;
Node(const T& d,Node* next=NULL):data(d),next(next){}
};
Node* head;
int len;
public:
~List(){clear();}
List():head(),len(){}
int size const{
return len;
}
void travel() const{
Node* p = head;
while(p){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
}
void clear(){
Node* p = head,*q;
while(p){
q = ->next;
delete p;
p = q;
}
head = NULL,len = 0;
}
Node*& getptr(int n){
if(n<0 || n>len) n=len;
if(n == 0){
return head;
}
Node* p = head;
for(int i=1;i<n;i++){
p = p->next;
}
reurn p->next;
}
void insert(const T& d,int n){
Node*& p=getptr(n);
Node* q = new Node(d,p);
p = q;
++len;
}
void erase(int n){
Node*& p = getptr(n);
if(p){
Node* q = p;
p = p->next;
delete q;
--len;
}
}
void remove(const T& d){
Node*& p = find(d);
if(p){
Node* q = p;
p = p->next;
delete q;
--len;
}
}
Node*& find(const T& d){
if(len==0 || head->data==d)
return head;
Node* p = head;
while(p->next && p->next->data!=d)
p = p->next;
return p->next;
}
void update(const T& oldv,const T& newv){
Node* p = find(oldv);
if(p){
p->data = newv;
}
}
//对 [ ] 的重载
T& operator[](int index) throw(const char*){
if(index<0 || index>=len) throw "x";
return getptr(index)->data;
}
};
PS:一个班里的舍友回学校了,孤身一人在帝都,加油!
相关文章推荐
- List.链表(增删改查)
- jQuery自定义数组操作类(类似于List集合的增删改查)
- 链表的增删改查的操作
- 链表的增删改查的操作
- c: 链表的增删改查的操作
- C语言,单链表操作(增删改查)(version 0.1)
- CPP一个链表,数据的增删改查(不包括翻转、排序,合并等)等,Node* &的使用
- 链表的增删改查的操作
- sqlLite数据库 实现对数据的增删改查 以及用list显示出数据内容
- 使用Makefile管理一个小项目:链表的增删改查操作和测试程序
- Java编程通过list接口实现数据的增删改查代码示例
- 链表的增删改查的操作
- c: 链表的增删改查的操作
- java链表结构(单向、双向的增删改查)
- 单链表的建立和增删改查代码及讲解
- 数据结构之链表的增删改查逆置及传统链表与非传统链表
- 双向链表的增删改查操作
- 使用DbUtils实现增删改查——ResultSetHandler接口的实现类
- 列表和字典嵌套完成电话簿(增删改查)
- JAXP对XML的DOM解析(增删改查)