數據結構:順序表之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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章