📄 zarray.h
字号:
#ifndef _ZARRAY_H_
#define _ZARRAY_H_
#include <stdlib.h>
#include <string.h>
class ZArray
{
void **buffer;
void append_size()
{
int newsize;
if(size==0)
newsize=4;
else
newsize=size<<1;
void **tmp=new void * [newsize];
//for(int i=0;i<size;i++)
// tmp[i]=buffer[i];
memcpy(tmp,buffer,size*sizeof(void*));
delete[] buffer;
buffer=tmp;
size=newsize;
}
public:
int size;
int no;
ZArray()
{
size=0;
no=0;
buffer=0;
}
~ZArray()
{
if (buffer)
free(buffer);
}
void clear()
{
no=0;
}
void* operator[](int n)
{
if(n<no)
return(buffer[n]);
return(0);
}
int add(void *p) //加入队列前
{
if(no>=size)
append_size();
int i;
for(i=no;i>0;i--)
buffer[i]=buffer[i-1];
buffer[0]=p;
no++;
return(no);
}
int push(void *p) //队列最后加
{
if(no>=size)
append_size();
buffer[no]=p;
no++;
return(no);
}
void insert(int n,void *p) //插入在位置i
{
if(no>=size)
append_size();
int i;
for(i=no;i>n;i--)
buffer[i]=buffer[i-1];
buffer[n]=p;
no++;
}
int insert(void *fp,void *p) //插入在fp前
{
int n;
for(n=0;n<no;n++)
if(buffer[n]==fp)
{
insert(n,p);
return(n);
}
return(-1);
}
int remove(void *p) //删除p
{
int n,i;
for(n=0;n<no;n++)
if(buffer[n]==p)
{
no--;
for(i=n;i<no;i++)
buffer[i]=buffer[i+1];
return(n);
}
return(-1);
}
void *remove(int n) //删除第i个
{
int i;
if(n>=0&&n<no)
{
void *ret=buffer[n];
for(i=n;i<no-1;i++)
buffer[i]=buffer[i+1];
no--;
return(ret);
}
return(0);
}
void *removefirst() //删除最后一个
{
if(no)
{
void *ret=buffer[0];
no--;
for(int i=0;i<no;i++)
buffer[i]=buffer [i+1];
return(ret);
}
return(0);
}
void *pop() //删除第一个
{
if(no)
{
no--;
return(buffer[no]);
}
return(0);
}
void *find(int n) //查找第 i个
{
if(n>=0&&n<no)
return(buffer[n]);
return(0);
}
int find(void *p) //查找p,返回位置
{
int n;
for(n=0;n<no;n++)
if(buffer[n]==p)
return(n);
return(-1);
}
void *findlast()
{
if(no)
return(buffer[no-1]);
return(0);
}
int movetolast(void *p) //将p移动到最后一个
{
int n,i;
void *tmp;
for(n=0;n<no;n++)
if(buffer[n]==p)
{
tmp=buffer[n];
for(i=n;i<no-1;i++)
buffer[i]=buffer[i+1];
buffer[no-1]=tmp;
return(n);
}
return(-1);
}
int movetofirst(void *p) //将p移动到第一个
{
int n,i;
void *tmp;
for(n=0;n<no;n++)
if(buffer[n]==p)
{
tmp=buffer[n];
for(i=n;i>0;i--)
buffer[i]=buffer[i-1];
buffer[0]=tmp;
return(n);
}
return(-1);
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -