1. 程式人生 > >動態順序表的相關功能——C語言實現

動態順序表的相關功能——C語言實現

1.結構體的建立
typedef struct SeqListD
{
	DataType* _array;
	size_t _capacity; // 底層空間的大小 
	size_t _size; // 有效元素的個數 
}SeqListD, *PSeqListD;
2.動態順序表的初始化
void SeqListDInit(PSeqListD pSeq)
{
	if (NULL == pSeq)
	{
		return;
	}
	pSeq->_array = (DataType*)malloc(4 * sizeof(DataType));
	if (NULL == pSeq->_array)
	{
		return;
	}
	pSeq->_capacity = 4;
	pSeq->_size = 0;
}
3.判斷動態順序表是否為空
int SeqListDEmpty(PSeqListD pSeq)
{
	return (0 == pSeq);
}
4.測量動態順序表中的有效元素個數
int SeqListDSize(PSeqListD pSeq)
{
	return pSeq->_size;
}
5.測量動態順序表中的最大容量
int SeqListDCapacity(PSeqListD pSeq)
{
	return pSeq->_capacity;
}
6.清空動態順序表中的元素
void SeqListDClear(PSeqListD pSeq)
{
	free(pSeq->_array);
	pSeq->_size = 0;
}
7.銷燬動態順序表
void SeqListDDestroy(PSeqListD pSeq)
{
	if (NULL == pSeq)
	{
		return;
	}
	free(pSeq->_array);
	pSeq->_capacity = 0;
	pSeq->_size = 0;
}
8.檢測動態順序表是否需要增容,如果需要增大到它原容量的二倍加一
int CheckCapacity(PSeqListD pSeq)
{
	if (NULL == pSeq)
	{
		return 0;
	}
	if (pSeq->_size == pSeq->_capacity)
	{
		pSeq->_array = (DataType*)realloc(pSeq->_array, 2 * (pSeq->_capacity) + 1);
		if (NULL == pSeq)
		{
			return 0;
		}
		pSeq->_array = 2 * pSeq->_capacity + 1;
	}
	return 1;
}
9.在動態順序表的尾部插入一個元素
void SeqListDPushBack(PSeqListD pSeq, DataType data)
{
	if (NULL == pSeq)
	{
		return;
	}
	if (!(CheckCapacity(pSeq)))
	{
		pSeq->_array[pSeq->_size++] = data;
	}
}
10.刪除動態順序表的最後一個元素
void SeqListDPopBack(PSeqListD pSeq)
{
	if (SeqListDEmpty)
	{
		return;
	}
	if (NULL == pSeq)
	{
		return;
	}
	pSeq->_size--;
}