利用C++类实现顺序表

以前写过用C语言实现的顺序表,现在来看看用C++类实现的吧

class SeqList
{
public:
	SeqList(int capacity=DEFAULT_CAPACITY)
		:_capacity(capacity)
		,_size(0)
		,_pData(0)
	{
		_pData=new DataType[_capacity];
	}

	~SeqList()
	{
		if(_pData!=NULL)
		{
			delete[] _pData;
		}
	}

	SeqList(const SeqList& s)
		:_size(s._size)
		,_capacity(s._capacity)
	{
		_pData=new DataType[_capacity];
		memcpy(_pData,s._pData,_size*sizeof(DataType));
	}

	SeqList& operator=(const SeqList& s)
	{
		if(this != &s)
		{
			delete[] _pData;
			_pData=new DataType[s._capacity];
			memcpy(_pData,s._pData,s._size*sizeof(DataType));
			_size=s._size;
			_capacity=s._capacity;
		}
		return *this;
	}

	void PushBack(const DataType& d)
	{
		_CheckCapacity();
		_pData[_size++]=d;
	}

	void PushFront(const DataType& d)
	{
		_CheckCapacity();
		int start=_size-1;
		while(start>=0)
		{
			_pData[start+1]=_pData[start];
			start--;
		}
		_pData[0]=d;
		_size++;
	}

	void PopBack()
	{
		if(_pData!=NULL)
		{
			_pData[_size--];
		}
	}

	void PopFront()
	{
		if(_pData!=NULL)
		{
			for(int i=0; i<_size-1; i++)
			{
				_pData[i]=_pData[i+1];
			}
			_size--;
		}
	}

	DataType& operator[](int index)
	{
		return ( _pData[index]);
	}

	int Find( const DataType& d)
	{
		int i=0;
		for(i=0; i<_size-1; i++ )
		{
			if(_pData[i]==d)
			{
				return i;
			}
		}
		return -1;
	}

	void Insert(int pos,const DataType& d)
	{
		assert(pos>=0 && pos<_size);
		int move=_size-pos;
		int end=_size;
		_CheckCapacity();
		while(move--)
		{
			_pData[end]=_pData[end-1];
			end--;
		}
		_pData[pos]=d;
		_size++;
	}

	void Remove(const DataType& d)
	{
		int pos=Find(d);
		int i=0;
		if(pos!=-1)
		{
			for(i=pos; i<_size-1; i++)
			{
				_pData[i]=_pData[i+1];
			}
			_size--;
		}
	}

	void Reverse()
	{
		int left=0;
		int right=_size-1;
		while(left<right)
		{
			DataType tmp=_pData[left];
			_pData[left]=_pData[right];
			_pData[right]=tmp;
			left++;
			right--;
		}
	}

	friend ostream& operator<<(ostream& os,const SeqList& s);

private:
	int _capacity; //线性表容量
	int _size;    //所含数据个数
	DataType *_pData;
	void _CheckCapacity()
	{
		if(_size==_capacity)
		{
			DataType *tmp=new DataType[_capacity+DEFAULT_CAPACITY ];
			memcpy(tmp,_pData,_size*sizeof(DataType));
			delete[] _pData;
			_pData=tmp;
			_capacity=_capacity+DEFAULT_CAPACITY ;
		}
	}

};

ostream& operator<<(ostream& os,const SeqList& s)
{
	int i=0;
	for(i=0; i<s._size; i++)
	{
		os<<s._pData[i]<<‘ ‘;
	}
	os<<endl;
 return os;
}
时间: 2024-08-09 11:50:46

利用C++类实现顺序表的相关文章

【C++】模版类实现普通类静态顺序表

在C或C++里,我们已经学会了如何实现一个静态顺序表了,那为何还要引入模版类来实现静态顺序表呢?首先,我们看,在未引入模版前,我们在C++里是这样定义一个静态顺序表的: typedef int DataType;    //此时我定义的是int型 class SeqList {     DataType* _array;     size_t _size;     size_t _capacity; } 我们若要定义char型或者其他类型的,可以采用typedef了,这就是使用typedef的优

利用C语言实现顺序表

利用C语言实现静态顺序表 //---------- 头文件#include "SeqList.h" -------------------- #pragma once #include<stdio.h>#include<stdlib.h>#include<string.h> #define MAX 100 //------------------ 定义数据类型 ----------------------------typedef int DataT

Java语言描述顺序表类,顺序表类的基本操作实现

数据结构(Java版)ch2 线性表的顺序存储(顺序表) 线性表的抽象数据Java接口描述如下: package ch2; /** * 线性表的抽象数据接口,用Java语言描述线性表的这些功能! * @author 房廷飞 * */ public interface IList { public void clear(); //将线型表置成空表 public boolean isEmpty(); //判断是不是空表 public int length(); //返回线性表的长度 public O

C++数据结构 顺序表的实现(模板类的实现)

利用模板类实现顺序表的操作 实现的功能: 1.尾插,2.头插,3.显示,4.尾删,5.头删,6.按位置,7.插按值插,8.按位置删,9.按值删,10.按值查,11.求表长,12.清除数据,13.摧毁该顺序表,14.反转,15.排序(冒泡排序,快速排序). 头文件源代码: #pragma once // 防止重复编译 #include<iostream> using namespace std; template<class Type> class SeqList { public:

DS顺序表--类实现

题目描述 实现顺序表的用C++语言和类实现顺序表 属性包括:数组.实际长度.最大长度(设定为1000) 操作包括:创建.插入.删除.查找 类定义参考 输入 第1行先输入n表示有n个数据,即n是实际长度:接着输入n个数据第2行输入要插入的位置和新数据第3行输入要插入的位置和新数据第4行输入要删除的位置第5行输入要删除的位置第6行输入要查找的位置第7行输入要查找的位置 输出 数据之间用空格隔开 第1行输出创建后的顺序表内容,包括顺序表实际长度和数据 每成功执行一次操作(插入或删除),输出执行后的顺序

线性表—顺序表

引言(重点): 1.线性表的概述 2.线性表的抽象数据类型描述 3.线性表的实现方式 4.线性表的具体实现 5.每种具体实现的分析 1.什么是线性表?线性表(Linear List):由同类型元素构成有序序列的线性结构. 特征:1.表中元素个数称为线性表的长度2.线性表没有元素时,称为空表3.表起始位置称表头,表结束位置称为表尾4.在一个元素的前面的元素叫前驱元素,在一个元素后面的元素叫后继元素. 2.线性表的抽象数据类型描述 List MakeEmpty():初始化一个空线性表L;Elemen

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

本文的内容主要是,利用c++写出顺序表,并对写出的代码进行测试, 主要实现的功能:实现对顺序表的增删查改, 要写的函数:构造函数,赋值运算符重载,析构函数.在编写代码过程中应注意到深浅拷贝问题. 下面是顺序表的类函数: #pragma once #include<iostream> using namespace std; typedef int DataType; class SeqList { public: SeqList(); SeqList(DataType *array, size

C实现的静态顺序表

             顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.线性表采用顺序存储的方式存储就称之为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中.      顺序表的存储特点是:只要确定了起始位置,表中任一元素地址都可以求出.        在c中实现顺序表时,由于函数较多,所以把函数的实现放在头文件中,在主函数中进行单元函数测试. SequenceList_Static.h #ifndef __SE

模板(顺序表与栈)

"顺序表与栈" 顺序表相对于我们来说已经不算是陌生的,顺序表有自己独有的特点,需要有一块独有的空间,访问中间的数据也较为简单,插入和删除数据就相对较难.针对顺序表的特点,我们不难想到一个数据结构"栈",栈的特点与顺序表相对来说很接近,栈的主要特点是"先进后出",即就是后进入栈的数据必须先出才能够访问到先前进入的数据,用顺序表来实现"栈"的一些基本功能更加合适. 这里首先提一下"模板"的概念,模板的一般形式为