简单顺序表

//线性表
//由同类型的数据元素构成的有序序列的线性结构
//线性表中没有元素的时候称为空表
//表起始位置称为表头,表结束的位置称为表尾

# include <iostream>
using namespace std;

class  SubsequenceList
{
	private:
		int* pData;//指向顺序表 
		int	 tail;//指向当前的最后一个元素的后面的下标 
		int maxSize;//最大长度 
		
	public:
		SubsequenceList(int maxSize)
		{
			this->maxSize=maxSize;
			pData=new int[maxSize];
			tail=0;
		}
		
		~SubsequenceList()
		{
			delete [] pData;
			tail=0;
		}
		
		void showList();//显示整个顺序表 
		bool insertIntoList(int element,int index);//在指定的下标来插入元素 
		bool deleteElementByIndex(int index);//通过下标来删除元素
		int  findElementByIndex(int index);//通过下标查找元素
		bool updataElementByIndex(int index,int element);//根据下标来更新内容 
		int getTail();//返回目前的尾部
		int findElementByContent(int element);//通过元素的内容来查找元素 
		
};
bool SubsequenceList::insertIntoList(int element,int index)//插入元素 
{
		if(index>this->tail+1)//在超过当前最大长度的时候,插入失败 
		{
			return false;
		}
		else
		{
			if(index==this->tail)//如果要插在顺序表的最后一个元素的后一个元素 
			{
				 this->pData[index]=element;
				 this->tail++;//尾部下标后移
				 return true;//插入成功 
			}
			else//插入的下标位于中间部分 
			{
				for(int i=this->tail;i>index;i--)//依次向后移动位置 
				{
					this->pData[i]=this->pData[i-1]; 
				}
				
				this->pData[index]=element;//插入元素
				this->tail++;//指向最后元素的下标向后移动
				return true; 
			}
		}
}

int SubsequenceList::getTail() //返回当前的尾部 
{
	return this->tail;
} 

void SubsequenceList::showList()//显示整个顺序表 
{
	//依次打印出所有的内容 
	for(int i=0;i<this->tail;i++)
	{
		cout<<this->pData[i]<<' ';
	}
	cout<<endl;
}

bool SubsequenceList::deleteElementByIndex(int index)//按照下标来删除元素 
{
	if(index>=this->tail||index<0)//如果要删除不在该顺序表中的元素
	{
		return false;//删除失败	
	} 
	else
	{
		for(int i=index;i<this->tail;i++)
		{
			this->pData[i]=this->pData[i+1];
		}
		//移动来删除要删除的位置
		this->tail--;//长度减少 
		return true;//删除成功 
		 
	}
} 


int SubsequenceList::findElementByIndex(int index)//根据下标查找元素
{
	if(index<0||index>=this->tail)//如果不在范围 
	{
		return -1;//返回-1,查找失败 
	}
	else
	{
		return this->pData[index];//返回效果 
	}
} 


bool SubsequenceList::updataElementByIndex(int index,int element)//根据下标来更新数据 
{
	if(index<0||index>=this->tail)//不在范围的话,无法更新失败 
	{
		return false;
	}
	else
	{
		this->pData[index=element];
		return true;
	}
}

int SubsequenceList::findElementByContent(int element)//根据内容查找对应的信息 
{
	bool isFind=false;//是否找到的标志 
	int index=-1;//找到的下标 
	for(int i=0;i<this->tail;i++)
	{
		if(this->pData[i]==element)//找到了 
		{
			isFind=true;
			index=i;
			break;
		}
	}
	if(isFind)
	{
		return index;
	}
	else
	{
		return index;
	}
}

int main(void)//测试类 
{
	SubsequenceList* s=new SubsequenceList(100);
	s->insertIntoList(1,0);
	s->insertIntoList(2,1);
	s->insertIntoList(3,2);

	s->insertIntoList(6,1);
	s->deleteElementByIndex(0); 
	s->showList();
	return 0;
}



 

  

posted @ 2019-07-13 15:27  梦小冷  阅读(194)  评论(0编辑  收藏  举报