内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

棧(C語(yǔ)言實(shí)現(xiàn))-創(chuàng)新互聯(lián)

文章目錄:
  • 1.棧的概念
  • 2.棧的結(jié)構(gòu)
  • 3.接口實(shí)現(xiàn)
    • 3.1初始化棧
    • 3.2判斷棧是否為空
    • 3.3壓棧(入棧)
    • 3.4出棧
    • 3.5查看棧頂元素
    • 3.6統(tǒng)計(jì)棧內(nèi)元素個(gè)數(shù)
    • 3.7銷毀棧

成都創(chuàng)新互聯(lián)公司專注于左權(quán)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供左權(quán)營(yíng)銷型網(wǎng)站建設(shè),左權(quán)網(wǎng)站制作、左權(quán)網(wǎng)頁(yè)設(shè)計(jì)、左權(quán)網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造左權(quán)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供左權(quán)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。1.棧的概念

棧:一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作。進(jìn)行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底,棧中的數(shù)據(jù)元素遵守 后進(jìn)先出LIFO(Last In First Out) 的原則

2.棧的結(jié)構(gòu)

由于棧后進(jìn)先出的特點(diǎn),相對(duì)而言數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)更優(yōu)一些。因?yàn)閿?shù)組在尾上插入數(shù)據(jù)的代價(jià)比小。實(shí)現(xiàn)類似于順序表,結(jié)構(gòu)包括一個(gè)數(shù)組指針,指向存儲(chǔ)數(shù)據(jù)的數(shù)組,再就是一個(gè)指向棧頂?shù)闹羔槪驗(yàn)閴簵r(shí)如果棧滿了需要?jiǎng)討B(tài)開(kāi)辟空間,所以這里還需要定義一個(gè)容量

//數(shù)據(jù)類型
typedef int STDataType;

//棧信息結(jié)構(gòu)
typedef struct Stack
{STDataType* a;//數(shù)組
	int top;// 初始為0,表示棧頂位置下一個(gè)位置的下標(biāo)
	int capacity;// 容量
}ST;

圖示:

3.接口實(shí)現(xiàn) 3.1初始化棧

將數(shù)組指針a置空,同時(shí)開(kāi)辟出起始空間容量,并將棧頂初始化為0,這里棧頂也可以初始化為-1,如果初始化為0,取棧頂就是取下標(biāo)為top-1位置處的元素,如果初始化為-1,取棧頂就是取的下標(biāo)為top位置處的元素

//初始化棧
void StackInit(ST* ps)
{assert(ps);
	//開(kāi)辟起始空間
	ps->a = (STDataType*)malloc(sizeof(STDataType) * 4);
	if (ps->a == NULL)//判斷開(kāi)辟成功
	{perror("malloc fail");
		exit(-1);
	}

	ps->top = 0;
	ps->capacity = 4;//初始容量
}
3.2判斷棧是否為空

根據(jù)前面的初始化,如果top指針在下標(biāo)為0的位置棧就為空,返回其布爾值即可

//判斷棧是否為空
bool StackEmpty(ST* ps)
{assert(ps);
	//返回top指針是否在下標(biāo)為0的位置
	return ps->top == 0;
}
3.3壓棧(入棧)

首先要考慮擴(kuò)容問(wèn)題,避免空間不夠還要壓棧,這里斷言ps是為了防止人為不小心傳空,然后將數(shù)據(jù)放入下標(biāo)為top的位置,再將top++后移一個(gè)位置即可,此時(shí)棧頂?shù)南聵?biāo)top代表的就是棧中數(shù)據(jù)的個(gè)數(shù)

//壓棧(入棧)
void StackPush(ST* ps, STDatatype x)
{assert(ps);
	// 判斷擴(kuò)容
	if (ps->top == ps->capacity)
	{STDatatype* tmp = (STDatatype*)realloc(ps->a, ps->capacity * 2 * sizeof(STDatatype));
		if (tmp == NULL)//判斷開(kāi)辟成功
		{	perror("realloc fail");
			exit(-1);
		}

		ps->a = tmp;
		ps->capacity *= 2;
	}
	//先將top位置放入數(shù)據(jù),再將top++后移
	ps->a[ps->top] = x;
	ps->top++;
}
3.4出棧

首先斷言棧為空的情況,??詹荒艹鰲?,然后出棧操作只需要將top指針減一改變棧頂位置為原棧頂?shù)南乱粋€(gè)元素即可,這里不需要將原棧頂置零,后面再進(jìn)行壓棧操作時(shí)自然會(huì)將其覆蓋掉

//出棧
void StackPop(ST* ps)
{assert(ps);
	//斷言棧為空
	assert(!StackEmpty(ps));
	//棧頂下標(biāo)后移一位
	ps->top--;
}
3.5查看棧頂元素

首先斷言棧為空的情況,棧為空無(wú)棧頂元素,然后將下標(biāo)為top-1的棧頂元素返回即可

//查看棧頂元素
STDatatype StackTop(ST* ps)
{assert(ps);
	//斷言棧為空
	assert(!StackEmpty(ps));
	//返回棧頂元素
	return ps->a[ps->top - 1];
}
3.6統(tǒng)計(jì)棧內(nèi)元素個(gè)數(shù)

棧頂?shù)南聵?biāo)top代表的就是棧中數(shù)據(jù)的個(gè)數(shù),將其返回即可

//統(tǒng)計(jì)棧內(nèi)元素個(gè)數(shù)
int StackSize(ST* ps)
{assert(ps);
	//返回棧頂下標(biāo)
	return ps->top;
}
3.7銷毀棧

銷毀棧我們直接釋放掉存儲(chǔ)棧的數(shù)組,再將數(shù)組指針置空(避免野指針),最后將棧頂指針和容量置零即可

//銷毀棧
void StackDestroy(ST* ps)
{assert(ps);
	//釋放數(shù)組
	free(ps->a);
	ps->a = NULL;//置空
	ps->top = ps->capacity = 0;//置零
}

棧的實(shí)現(xiàn)到這里就介紹結(jié)束了,期待大佬們的三連!你們的支持是我大的動(dòng)力!
文章有寫的不足或是錯(cuò)誤的地方,歡迎評(píng)論或私信指出,我會(huì)在第一時(shí)間改正。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

標(biāo)題名稱:棧(C語(yǔ)言實(shí)現(xiàn))-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://m.rwnh.cn/article0/dsdjio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)建站、虛擬主機(jī)域名注冊(cè)、小程序開(kāi)發(fā)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
漾濞| 柳州市| 隆尧县| 叶城县| 神农架林区| 广平县| 凤城市| 大姚县| 色达县| 阿鲁科尔沁旗| 阿尔山市| 克山县| 屯留县| 太原市| 六枝特区| 南和县| 鹰潭市| 始兴县| 乐业县| 南丰县| 石河子市| 襄垣县| 阳朔县| 西贡区| 灯塔市| 富民县| 纳雍县| 保亭| 邮箱| 营山县| 新野县| 吐鲁番市| 青河县| 禄劝| 绥德县| 晋城| 邛崃市| 乌兰浩特市| 任丘市| 得荣县| 吉木乃县|