起始数组编号:0
包含函数:
size,
operator[],
push_back(val),
insert(pos,val)(在pos前插入val),
erase(pos),
find(val);(return -1)
压行前
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
//array numbered from 0
template<typename T> class list {
private:
struct Node {
T val;
Node *prev,*next;
Node():val(0),prev(NULL),next(NULL) {}
Node(T tval):val(tval),prev(NULL),next(NULL) {}
}*head,*tail;
public:
int size;
list():size(0),head(new Node),tail(head) {}
~list() {}
T operator[](const int pos)const {
int tp=0; Node *tnode=head;
while(tp++<=pos) tnode=tnode->next;
return tnode->val;
}
void push_back(T tval) {
size++;
Node *tnode=new Node(tval);
tnode->prev=tail;
tail->next=tnode;
tail=tnode;
}
//insert a value before pos
void insert(int pos,T tval) {
size++;
int tp=0; Node *tnode=head;
while(tp++<pos) tnode=tnode->next;
Node *ins=new Node(tval);
ins->prev=tnode;
if(tnode->next!=NULL) {
ins->next=tnode->next;
tnode->next->prev=ins;
}
tnode->next=ins;
}
void erase(int pos) {
size--;
int tp=0; Node *tnode=head;
while(tp++<pos) tnode=tnode->next;
tnode->prev->next=tnode->next;
tnode->next->prev=tnode->prev;
delete tnode;
}
int find(T fval) {
int tp=0; Node *tnode=head;
while((tnode=tnode->next)!=NULL) {
if(tnode->val==fval) return tp;
tp++;
}
return -1;
}
void print_all() {
for(Node *tnode=head->next;tnode!=NULL;tnode=tnode->next) {
cout<<tnode->val<<" ";
}
cout<<endl;
}
};
int main() {
srand(time(0));
list<int>l;
for(register int i=1;i<1e7;i++) l.push_back(rand());
}
压行后
template<typename T>class list{
private:struct Node{T val;Node *prev,*next;Node():val(0),prev(NULL),next(NULL){}
Node(T tval):val(tval),prev(NULL),next(NULL){}}*head,*tail;
public:int size;list():size(0),head(new Node),tail(head){}~list(){}
T operator[](const int pos)const{int tp=0;Node *tnode=head;
while(tp++<=pos)tnode=tnode->next;return tnode->val;}
void push_back(T tval){size++;Node *tnode=new Node(tval);tnode->prev=tail;tail->next=tnode;tail=tnode;}
void insert(int pos,T tval){size++;int tp=0;Node *tnode=head;while(tp++<pos)
tnode=tnode->next;Node *ins=new Node(tval);ins->prev=tnode;if(tnode->next!=NULL)
{ins->next=tnode->next;tnode->next->prev=ins;}tnode->next=ins;}
void erase(int pos){size--;int tp=0;Node *tnode=head;while(tp++<pos) tnode=tnode->next;
tnode->prev->next=tnode->next;tnode->next->prev=tnode->prev;delete tnode;}
int find(T fval){int tp=0;Node *tnode=head;while((tnode=tnode->next)!=NULL)
{if(tnode->val==fval) return tp;tp++;}return -1;}};
.