C++版的顺序表

这篇博客是《妙趣横生的算法(C++版)》的学习笔记,本人只是简单的跟着书敲着玩并浅显思考,具体的代码肯定是记不住的,但是能理解算法思路的一二也足以了。有时候,当你做一件事情的时候,并不一定能带来太多的收获,但是坚持下去就行了,做自己应该做的,量变必定引起质变


// 顺序表.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;

template<typename DataType> class SeqList
{
public :
	//构造函数
	SeqList(int size = defaultSize)
	{
		if (size > 0)//检查合法性
		{
			maxSize = size;
			length = 0;
			elements = new DataType[maxSize];//分配内存
			for (int i = 0; i< maxSize; i++)
			{
				elements[i] = NULL;
			}
		}
	}
	//析构函数
	~SeqList()
	{
		delete[] elements;
	}

	bool insertOneElement(DataType data);				//插入元素
	bool deletedElement(int location);					//删除元素
	DataType getElements(int location);				//获得元素
	bool changeElement(int location, DataType newData);//更改指定位置的元素

	int getLength()
	{
		return length;
	}

private :
	static const int defaultSize = 10;
	DataType *elements;
	int maxSize;
	int length;
};

//
	//顺序表插入操作
template<typename DataType> bool SeqList<DataType>::insertOneElement(DataType data)
{
	int currentIndex = length;	//记录新元素插入的位置
	if (length >= maxSize)	
	{
		return false;
	}
	else
	{
		elements[currentIndex] = data;	//将新元素插入顺序表的表尾
		length++;
		return true;
	}
}
//
	//获取指定位置元素
template <typename DataType> DataType SeqList<DataType>::getElements(int location)
{
	if (location<0 || location>length)//容错
	{
		std::cout << "参数无效" << std::endl;
	}
	else   //获取指定位置元素的值
	{
		return elements[location];
	}
}
//
	//删除指定位置的元素
template <typename DataType> bool SeqList<DataType>::deletedElement(int location)
{
	if (location >= length || length < 0)
	{
		return false;
	}
	else
	{
		for (int i = location; i < length;i++)
		{
			//将指定位置的元素往前移动
			elements[i] = elements[i + 1];
		}
		length--;	//长度减一
		return true;
	}
}
//
	//改变指定位置的元素的值
template<typename DataType> bool SeqList<DataType>::changeElement(int location, DataType newData)
{
	if (location < 0 || location >= length)
	{
		return false;
	}
	else
	{
		//改变值
		elements[location] = newData;
		return true;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	SeqList<int> list(10);
	for (int i = 0; i < 10;i++)
	{
		list.insertOneElement(i * 10);
	}

	for (int i = 0; i < list.getLength();i++)
	{
		cout << list.getElements(i) << "  ";
	}
	cout << endl;
	list.deletedElement(3);
	for (int i = 0;i<list.getLength();i++)
	{
		cout << list.getElements(i) << "  ";
	}
	cout << endl;
	list.changeElement(4, 33);
	for (int i = 0; i < list.getLength();i++)
	{
		cout << list.getElements(i) << "  ";
	}
	cout << endl;
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值