#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();
}
python list的实现
最新推荐文章于 2022-08-16 15:19:15 发布