数据结构:顺序表之C++模板类实现

C++模板类实现顺序表相较c语言实现,
表的创建和销毁可以构造与析构函数管理。
定义表的长度、容量以及内存数组可以用私有成员实现,替代c语言中的结构体定义。

c定义: 定义表的结构体
typedef struct _tag_SeqList
{
    int length;
    int capacity;
    unsigned int **node;
}TSeqList;

其二是在操作函数中因为类中有隐藏的this指针,所以省去了传送表的地址。函数中可以直接调用私有成员来获取信息。
再有是外部数据节点交互可通过传引用实现而不用指针。

SeqList.h

#pragma once

template <typename T>
class SeqList
{
public:
	SeqList(int Capacity);
	~SeqList();

	int getLen();

	int getCapacity();

	int insert( T &t, int pos);

	int get(int pos, T &t);   //直接传引用,不需要返回节点了

	int del(int pos, T &t);
private:
	int length;
	int capacity;
	T *pArray;  //数组
};

注意添加类模板关键语句

template <typename T>

SeqList.cpp

#include "SeqList.h"
template <typename T>
SeqList<T>::SeqList(int Capacity)   //注意泛型编程格式
{
	pArray = new T[Capacity];
	this->capacity = Capacity;
	this->length = 0;
}

template <typename T>
SeqList<T>::~SeqList()
{
	delete[]pArray;
	pArray = NULL;
	length = 0;
	capacity = 0;
}

template <typename T>
int SeqList<T>::getLen()
{
	return length;
}
template <typename T>
int SeqList<T>::getCapacity()
{
	return capacity;
}
template <typename T>
int SeqList<T>::insert(T &t, int pos)
{
	int i = 0;
	if (pos < 0)
	{
		return -1;
	}
	for (i = length; i > pos; i--)
	{
		pArray[i] = pArray[i - 1];
	}
	pArray[i] = t;   //Stl元素保存时通过复制的机制实现,设计的类要能复制才行
	length++;
	return 0;
}
template <typename T>
int SeqList<T>::get(int pos, T &t)   //直接传引用,不需要返回节点了
{
	if (pos < 0)
	{
		return -1;
	}
	t = pArray[pos];
	return 0;
}
template <typename T>
int SeqList<T>::del(int pos, T &t)
{
	int i = 0;
	if (pos<0 || pos>length)
	{
		return -1;
	}
	t = pArray[pos];

	for (i = pos + 1; i < length; i++)
	{
		pArray[i - 1] = pArray[i];
	}
	length--;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章