溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

c實(shí)現(xiàn)的動(dòng)態(tài)順序表

發(fā)布時(shí)間:2020-07-09 00:35:25 來(lái)源:網(wǎng)絡(luò) 閱讀:246 作者:伊憶墨 欄目:編程語(yǔ)言

    第一篇文章中用c實(shí)現(xiàn)了靜態(tài)順序表,但是使用靜態(tài)順序表還有不足的地方。當(dāng)我們需要存儲(chǔ)的數(shù)據(jù)很少時(shí),如果靜態(tài)順序表的數(shù)組容量較大就會(huì)造成空間的浪費(fèi);當(dāng)我們需要存儲(chǔ)的數(shù)據(jù)很多時(shí),如果靜態(tài)順序表的數(shù)組容量較小可能就會(huì)造成數(shù)據(jù)丟失。所以一般情況我們應(yīng)該盡量把順序表實(shí)現(xiàn)成動(dòng)態(tài)的。需要多大容量就開(kāi)辟多大容量。

     靜態(tài)順序表和動(dòng)態(tài)順序表只有以下函數(shù)不同:

     1.定義結(jié)構(gòu)體時(shí),多定義一個(gè)capacity,并對(duì)capacity進(jìn)行初始化和增加大小的設(shè)置;

#define INIT_CAPACITY 3
#define DEFAULT_INC 3


typedef struct
{
	DataType *Data;
	int size;
	int capacity;
}SeqList,*pSeqList;


     2.動(dòng)態(tài)順序表多了容量檢測(cè)函數(shù)(沒(méi)有容量時(shí)進(jìn)行動(dòng)態(tài)開(kāi)辟);

void CheckCapacity(pSeqList pSeq)
{
	assert(pSeq);
	//當(dāng)存儲(chǔ)的有效值個(gè)數(shù)和容量相等時(shí)進(jìn)行擴(kuò)容
	if(pSeq->size == pSeq->capacity)
	{
		pSeq->Data = (DataType*)realloc(pSeq->Data,pSeq->capacity + DEFAULT_INC);
		pSeq->capacity = pSeq->capacity + DEFAULT_INC;
	}
}


     3.動(dòng)態(tài)順序表中進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)先要進(jìn)行容量檢測(cè);

void PushBack(pSeqList pSeq, DataType x)
{
	assert(pSeq);
	CheckCapacity(pSeq);
	pSeq->Data[pSeq->size++] = x;
}
void PushFront(pSeqList pSeq, DataType x)
{
	int i = 0;
	assert(pSeq);
	CheckCapacity(pSeq);
	for(i = pSeq->size; i > 0; i--)
	{
		pSeq->Data[i] = pSeq->Data[i-1];
	}
	pSeq->Data[0] = x;
	pSeq->size++;
}
void Insert(pSeqList pSeq,int pos,DataType x)
{
	int i = 0;
	assert(pSeq);
	assert((pos<pSeq->size) && (pos >= 0));
	CheckCapacity(pSeq);
	for(i = pSeq->size; i>pos; i--)
	{
		pSeq->Data[i] = pSeq->Data[i-1];
	}
	pSeq->Data[pos] = x;
	pSeq->size++;
}


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI