/*----------head.h ----------*/
#ifndef HEAD_H
#define HEAD_H
#include <iostream>
using namespace std;
#include <cstdlib>
typedef int status;
#endif
/*----------node.h ----------*/
#ifndef NODE_H
#define NODE_H
template <typename T> struct Node{
T data;
Node<T> *next;
};
#endif
/*----------list.h ----------*/
#ifndef LIST_H
#define LIST_H
#include "node.h"
//首元素从 1 始
template <typename T> class List{
public:
List()
{
head=new Node<T>;
head->next=NULL;
}
~List()
{
Clear();
delete head;
}
bool Empty() //判空
{
if(head->next==NULL)
return true;
else
return false;
}
void Clear() //清空
{
while(head->next!=NULL){
Node<T> *p=head->next;
head->next=p->next;
delete p;
}
}
void push_back(const T &value) //压入
{
Node<T> *elem=new Node<T>;
elem->data=value;
elem->next=NULL; //构造结点
Node<T> *p=head;
while(p->next!=NULL)
p=p->next; //p指向尾结点
p->next=elem;
}
void Display() //显示
{
Node<T> *p=head->next;
while(p){
cout << p->data << " ";
p=p->next;
}
cout << endl;
}
int length() //长度
{
int j(0);
Node<T> *p=head->next;
while(p){
j++;
p=p->next;
}
return j;
}
int size()
{
int j(0);
Node<T> *p=head->next;
while(p){
j++;
p=p->next;
}
return j;
}
status Insert(int i,const T &value) //插入
{
if(i<1||i>this->size()+1){
cerr << "插入位置有误,请检查: " << endl;
return 0;
}
Node<T> *t=new Node<T>;
t->data=value;
t->next=NULL; //构造结点
Node<T> *p=head; //寻找插入位置
int j(0);
while(p->next!=NULL && j!=i-1){ //注意p->next条件 决定下标起始为1,而p决定下标起始为0
j++;
p=p->next;
}
t->next=p->next;
p->next=t;
return 1;
}
status Delete(int i) //删除
{
if(head->next==NULL){
cerr << "链表为空表,操作失败! " << endl;
return 0;
}
if(i<1 || i>this->size()){
cerr << "删除位置越界,请检查: " << endl;
return 0;
}
Node<T> *p=head;
int j(0);
while(p->next!=NULL && j!=i-1){
j++;
p=p->next;
} // 令p指向 i-1 个元素位置
Node<T> *t=p->next;
p->next=t->next;
delete t;
return 1;
}
T GetElem(int i) //取元素
{
if(head->next==NULL || i<1 || i> this->size()){
cerr << "位置越界,请检查: " << endl;
exit(0);
}
Node<T> *p=head->next;
int j(1);
while(p->next!=NULL && j!=i){
j++;
p=p->next;
}
return p->data;
}
status Replace (int i,const T &value) //替换
{
if(head->next==NULL || i <1 || i >this->size()){
cerr << "位置有误,请检查:" << endl;
exit(0);
}
int j(1);
Node<T> *p=head->next;
while(p->next!=NULL && j!=i){
j++;
p=p->next;
}
p->data=value;
return 1;
}
private:
Node<T> *head;
};
#endif