python list的实现

#include<iostream>
#include<cassert>
using namespace std;
const int InitCapacity=100;
class List{
private:
	int *arr;
	int capacity;
	int size;
	void quicksort(int *arr,int left,int right){
		if(right-left>1){
			int i,j;
			i=left-1;
			int x=arr[right-1];
			for(j=left;j<right-1;j++){
				if(arr[j]<=x){
					i++;
					swap(arr[i],arr[j]);
				}
			}
		swap(arr[i+1],arr[right-1]);
		quicksort(arr,left,i+1);
		quicksort(arr,i+2,right);
		}
	}
public:
	List(){
		arr=new int[InitCapacity];
		capacity=InitCapacity;
		size=0;
	}
	~List(){
		delete[] arr;
	}
	void append(int x){
		if(size>=capacity){
			expand();
		}
		arr[size++]=x;
	}
	bool expand(int expsize=0){
		int expandsize=max(expsize,capacity*2);
		int *newarr=new int[expandsize];
		if(newarr==NULL){
			cout<<"out of memory"<<endl;
			throw exception("out of memory");
			return false;
		}else{
			memcpy(newarr,arr,sizeof(int)*size);
			capacity=expandsize;
			delete[] arr;
			arr=newarr;
			return true;
		}
	}
	void print()const{
		for(int i=0;i<size;i++){
			cout<<(i==0 ? "" : " ")<<arr[i];
		}
		cout<<endl;
	}
	void extend(const List& l){
		if(l.size+size>=capacity){
			expand(l.size+size);
		}else{
			memcpy(arr+size,l.arr,sizeof(int)*l.size);
			size+=l.size;
		}
	}
	void insert(int i,int x){
		if(size>=capacity){
			expand();
		}else{
			for(int j=size;j>i;j--) arr[j]=arr[j-1];
			arr[i]=x;
			size++;
		}
	}
	bool remove(int x){
		for(int i=0;i<size;i++){
			if(arr[i]==x){
				for(int j=i;j<size-1;j++) arr[j]=arr[j+1];
				size--;
				return true;
			}
		}
		return false;
	}
	int pop(){
		assert(size>0);
		size--;
		return arr[size];
	}
	int pop(int i){
		assert(size>0);
		int res=arr[i];
		for(int j=i;j<size-1;j++) arr[j]=arr[j+1];
		return res;
		size--;
	}
	void clear(){
		size=0;
	}
	int index(int x){
		for(int i=0;i<size;i++){
			if(arr[i]==x){
				return i;
			}
		}
		return -1;
	}
	int count(int x){
		int cnt=0;
		for(int i=0;i<size;i++){
			if(arr[i]==x)
				cnt++;
		}
		return cnt;
	}
	void sort(){
		quicksort(arr,0,size);
	}
	void reverse(){
		int i,j;
		for(i=0,j=size-1;i<j;i++,j--){
			swap(arr[i],arr[j]);
		}
	}
	List copy(){
		return *this;
	}
};
int main()
{
	List lst;
	lst.append(66);
	lst.append(333);
	lst.append(333);
	lst.append(1);
	lst.append(1234);
	lst.print();
	lst.insert(2,-1);
	lst.append(333);
	lst.print();
	lst.remove(333);
	lst.print();
	lst.reverse();
	lst.print();
	lst.sort();
	lst.print();
	lst.pop();
	lst.print();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值