模板:list

起始数组编号: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;}};  




.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值