码迷,mamicode.com
首页 > 编程语言 > 详细

【C++】顺序表的实现

时间:2015-08-25 21:39:37      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:c++

#include<iostream>
#include<assert.h>
using namespace std;


//typedef struct FindRet
//{
//	bool isFind;	// 是否找到的标示
//	size_t index;	// 找到数据的下标
//}Findret;

typedef int DataType;

class SeqList
{
public:
	SeqList()
	{
		 _array = new int[10];
		 _size = 0;
		 _capicity = 10;
	}

	SeqList(const SeqList& sList)
	{
		_array = new int [sList._capicity] ;
		_size = sList._size ;
		_capicity = sList._capicity ;
	}

	SeqList& operator=(const SeqList& sList)
	{
		if(this != &sList)
		{
			delete []_array;
			_array = new int [sList._capicity];
			_size = sList._size ;
		    _capicity = sList._capicity ;
        }
		return *this;
	}

	~SeqList()
	{
		delete []_array;
	}

	void PushBack(const DataType& x) //尾插
	{ 
		_CheakCapicity();
		_array [_size] = x;
	    _size ++;
    }
    
	void PushFront(const DataType& x)//头插
	{
		_CheakCapicity();
		int i=_size;
	    for(i=_size; i > 0; i--)
		{
			_array[i] = _array[i-1];
		}
	    _array[0] = x;
	    _size++;
	}
	void PopFront()//头删
	{
		if(_size == 0)
		{
			cout<<"顺序表为空"<<endl;
		}
		else
		{
			int count = 1;
			for(count = 1; count<_size; count++)
			{
				_array[count-1] = _array[count];
			}
			_array[_size - 1] = 0;
			_size--;
		}
	}
	void PopBack()
	{
		if(_size == 0)
		{
			cout<<"顺序表为空"<<endl;
		}
		else
		{
			_array[_size - 1] = 0;
			_size--;
		}
	}
	
	void Print()
	{
		int count = _size;
		for(_size= 0; _size < count ; _size++)
		{
			cout<<_array[_size]<<" ";
		}
		cout<<endl;
	}

	// 实现上面的函数

	void Insert(size_t index, const DataType& x)
	{
		    _CheakCapicity();
			int i = _size;
			for(i = _size; i >= index; i--)
			{
				_array[i]= _array[i-1];
			}
			_array[index-1]=x;
			_size++;
		
	}
	void Modified (size_t index, const DataType& x)
	{
		if(index < 0 && index >_size -1)
		{
			cout<<"不合法的位置"<<endl;
		}
		else
		{
			_array[index - 1] = x;
		}
	}
	void Remove(size_t index)
	{
		if(index < 0 && index >_size -1)
		{
			cout<<"不合法的位置"<<endl;
		}
		else
		{
			int count = index;
			for(count = index; count <=_size - 1; count++)
			{
				_array[count-1]=_array[count];
            }
			_array[_size-1] = 0;
			_size--;
		}
	}
	
	bool Find(const DataType& x, size_t findIndex)
	{
		if(findIndex <0||findIndex >_size-1)
		{
			return false;
		}
		if(_array[findIndex]==x)
		{
			return true;
		}
		return false;
	}
	
private:
	bool _CheakCapicity()
	{
		if(_size == _capicity)
		{
			 DataType* tmp = new DataType [_capicity * 2];
			 memcpy(tmp,_array,sizeof(_size * 4));
			 delete []_array;
			 _array = tmp;
			 return true;
		}
	}
private:
	DataType* _array;
	size_t _size;
	size_t _capicity;
};

int main()
{
	SeqList s1;
	s1.PushBack(1);
	s1.PushBack(2);
	s1.PushBack(3);
	s1.PushBack(4);
	s1.PushBack(5);
	s1.PushFront(6);
	s1.PushFront(7);
	s1.PushFront(8);
	s1.Insert(3,2);
	s1.Modified(3,7);
    
	s1.Remove(3);
    s1.PopFront();
	s1.PopBack();
    s1.Print ();
	getchar();
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【C++】顺序表的实现

标签:c++

原文地址:http://blog.csdn.net/liuxiaoqian_/article/details/47983507

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!