⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zarray.h

📁 通用指针数组类
💻 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 + -