国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一篇文章帶你實(shí)現(xiàn)棧的接口

這篇具有很好參考價(jià)值的文章主要介紹了一篇文章帶你實(shí)現(xiàn)棧的接口。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一,什么是棧

棧(Stacks)是限定在一端插入和刪除的線性表。允許插入和刪除的一端稱(chēng)為棧頂(Top),另一端稱(chēng)為棧底(Bottom)。棧中的數(shù)據(jù)元素遵守后進(jìn)先出(Last In First Out)的原則。因此,棧又稱(chēng)為后進(jìn)先出(先進(jìn)后出)線性表。

壓棧:棧的插入操作叫做進(jìn)棧、壓棧、入棧,入數(shù)據(jù)在棧頂。

出棧:棧的刪除操作叫做出棧。出數(shù)據(jù)也在棧頂。

如圖所示:

一篇文章帶你實(shí)現(xiàn)棧的接口,數(shù)據(jù)結(jié)構(gòu)1,算法,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,鏈表

?二,棧的實(shí)現(xiàn)

棧的實(shí)現(xiàn)一般有兩種存儲(chǔ)方法,順序棧(數(shù)組)和鏈棧(鏈表)。

這里我們采用順序棧。

一篇文章帶你實(shí)現(xiàn)棧的接口,數(shù)據(jù)結(jié)構(gòu)1,算法,數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,鏈表

?

2.1,棧的結(jié)構(gòu)

這里采用支持動(dòng)態(tài)增長(zhǎng)的棧,用a來(lái)指向空間中對(duì)應(yīng)數(shù)組的地址。用top來(lái)表示棧頂,用capcity表示容量,到后面容量不夠擴(kuò)容用。

typedef int SDataType;
typedef struct Stack
{
	SDataType* a;//數(shù)組存儲(chǔ)數(shù)據(jù)
	int top;//棧頂
	int capcity;//容量
}ST;

2.2,棧的接口

void STInit(ST* p);//棧的初始化
void STPush(ST* p, SDataType x);//壓棧
bool STEmpty(ST* p);//判斷數(shù)據(jù)是否為空
void STPop(ST* p);//出棧
SDataType STTop(ST* p); //取棧頂數(shù)據(jù)
void STDestroy(ST* p);//棧的銷(xiāo)毀
int STSize(ST* p);//棧的大小

三,接口的實(shí)現(xiàn)。

3.1,棧的初始化

這里先申請(qǐng)一個(gè)4個(gè)字節(jié)的空間。容量為4。top可以是0,也可以是1。

void STInit(ST* p)//棧的初始化
{
	assert(p);
	p->a = (SDataType*)malloc(sizeof(SDataType)*4);
	p->top = -1;//top = 0 時(shí)是棧頂?shù)南乱粋€(gè)位置。top =-1 是棧頂?shù)奈恢谩?	p->capcity = 4;
}

3.2,棧的插入(壓棧)

這里插入數(shù)據(jù)前判斷一下容量是否充足,如果不足,就用realloc擴(kuò)容成原來(lái)容量的2倍。最后將x插入到棧頂中。注意:p->top++;//這里加加后,訪問(wèn)棧頂?shù)脑刂苯涌梢杂胊[p->top]

void STPush(ST* p, SDataType x)//壓棧
{
	assert(p);
	if (p->capcity == p->top + 1)
	{
		SDataType* tmp = (SDataType*)realloc(p->a, sizeof(SDataType) * p->capcity * 2);
		if (tmp == NULL)
		{
			perror("realloc fail");
		}
		p->a = tmp;
		p->capcity *= 2;

	}
	p->a[p->top + 1] = x;
	p->top++;//這里加加后,訪問(wèn)棧頂?shù)脑刂苯涌梢杂胊[p->top]

}

3.3,出棧

這里在top減一之前需要判斷一下棧是否為空的情況。

void STPop(ST* p)//出棧
{
	assert(p);
	assert(!STEmpty(p));//判斷是否為空
	p->top--;
}

棧為空的實(shí)現(xiàn)

這里bool(布爾值)的頭文件為:stdbool.h,如果為空返回1,不為空等號(hào)不成立,返回0;

bool STEmpty(ST* p)
{
	assert(p);
	return p->top + 1 == 0;
}

3.4,獲取棧頂元素

這里還是判斷一下是否為空,然后返回棧頂元素。

SDataType STTop(ST* p) //取棧頂數(shù)據(jù)
{
	assert(p);
	assert(!STEmpty(p));
	return p->a[p->top];
}

3.5,棧的大小

這里判斷完非空后,直接返回top+1(看完上面的壓棧程序中,這里可以把top理解成數(shù)組下標(biāo),加一是總大小)。

int STSize(ST* p)//棧的大小
{
	assert(p);
	assert(!STEmpty(p));
	return p->top + 1;
}

3.6,棧的銷(xiāo)毀

把申請(qǐng)的空間釋放,再置為空。其余賦值為0;

void STDestroy(ST* p)//棧的銷(xiāo)毀
{
	assert(p);
	free(p->a);
	p->a = NULL;
	p->capcity = 0;
	p->top = 0;
}

四,總代碼

//test.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include<stdlib.h>
typedef int SDataType;
typedef struct Stack
{
	SDataType* a;//數(shù)組存儲(chǔ)數(shù)據(jù)
	int top;//棧頂
	int capcity;//容量
}ST;
void STInit(ST* p);//棧的初始化
void STPush(ST* p, SDataType x);//壓棧
bool STEmpty(ST* p);//判斷數(shù)據(jù)是否為空
void STPop(ST* p);//出棧
SDataType STTop(ST* p); //取棧頂數(shù)據(jù)
void STDestroy(ST* p);//棧的銷(xiāo)毀
int STSize(ST* p);//棧的大小

//stack.c接口的實(shí)現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1
#include"test.h"
void STInit(ST* p)//棧的初始化
{
	assert(p);
	p->a = (SDataType*)malloc(sizeof(SDataType)*4);
	p->top = -1;//top = 0 時(shí)是棧頂?shù)南乱粋€(gè)位置。top =-1 是棧頂?shù)奈恢谩?	p->capcity = 4;
}
void STPush(ST* p, SDataType x)//壓棧
{
	assert(p);
	if (p->capcity == p->top + 1)
	{
		SDataType* tmp = (SDataType*)realloc(p->a, sizeof(SDataType) * p->capcity * 2);
		if (tmp == NULL)
		{
			perror("realloc fail");
		}
		p->a = tmp;
		p->capcity *= 2;

	}
	p->a[p->top + 1] = x;
	p->top++;

}
void STPop(ST* p)//出棧
{
	assert(p);
	assert(!STEmpty(p));
	p->top--;
}
SDataType STTop(ST* p) //取棧頂數(shù)據(jù)
{
	assert(p);
	assert(!STEmpty(p));
	return p->a[p->top];
}
void STDestroy(ST* p)//棧的銷(xiāo)毀
{
	assert(p);
	free(p->a);
	p->a = NULL;
	p->capcity = 0;
	p->top = 0;
}
int STSize(ST* p)//棧的大小
{
	assert(p);
	assert(!STEmpty(p));
	return p->top + 1;
}
bool STEmpty(ST* p)
{
	assert(p);
	return p->top + 1 == 0;
}
//test.c接口的測(cè)試
#define _CRT_SECURE_NO_WARNINGS 1
#include"test.h"
int main()//測(cè)試
{
	ST s;
	STInit(&s);
	STPush(&s, 0);
	printf("%d\n", STTop(&s));
	STPush(&s, 1);
	printf("%d\n", STTop(&s));
	STPush(&s, 2);
	printf("%d\n", STTop(&s));
	STPush(&s, 3);
	printf("%d\n", STTop(&s));
	STPop(&s);
	STPop(&s);
	printf("%d\n", STTop(&s));

	printf("%d\n", STSize(&s));
	return 0;
}

好了,到這里就該結(jié)束了。希望對(duì)大家有所幫助!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-641299.html

到了這里,關(guān)于一篇文章帶你實(shí)現(xiàn)棧的接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • b樹(shù)(一篇文章帶你 理解 )

    b樹(shù)(一篇文章帶你 理解 )

    目錄 一、引言 二、B樹(shù)的基本定義 三、B樹(shù)的性質(zhì)與操作 1 查找操作 2 插入操作 3 刪除操作 四、B樹(shù)的應(yīng)用場(chǎng)景 1 數(shù)據(jù)庫(kù)索引 2 文件系統(tǒng) 3 網(wǎng)絡(luò)路由表 五、哪些數(shù)據(jù)庫(kù)系統(tǒng)不使用B樹(shù)進(jìn)行索引 1 列式數(shù)據(jù)庫(kù) 2 圖形數(shù)據(jù)庫(kù) 3 內(nèi)存數(shù)據(jù)庫(kù) 4 NoSQL數(shù)據(jù)庫(kù) 5 分布式數(shù)據(jù)庫(kù) 六、總結(jié) 在計(jì)算

    2024年03月17日
    瀏覽(37)
  • 一篇文章帶你入門(mén)HBase

    本文已收錄至Github,推薦閱讀 ?? Java隨想錄 微信公眾號(hào):Java隨想錄 目錄 HBase特性 Hadoop的限制 基本概念 NameSpace Table RowKey Column TimeStamp Cell 存儲(chǔ)結(jié)構(gòu) HBase 數(shù)據(jù)訪問(wèn)形式 架構(gòu)體系 HBase組件 HBase讀寫(xiě)流程 讀流程 寫(xiě)流程 MemStore Flush 參數(shù)說(shuō)明 StoreFile Compaction 參數(shù)說(shuō)明 觸發(fā)過(guò)程

    2024年02月08日
    瀏覽(41)
  • 一篇文章帶你搞懂前端Cookie

    一篇文章帶你搞懂前端Cookie

    瀏覽器Cookie相信各位點(diǎn)進(jìn)這篇文章的小伙伴應(yīng)該不陌生了,它是前端領(lǐng)域中一個(gè)非常重要的內(nèi)容,當(dāng)然也是面試的一個(gè)考點(diǎn),不知道各位小伙伴是否真正掌握了Cookie呢?當(dāng)然沒(méi)有掌握也是沒(méi)有關(guān)系的,可以跟著小編的腳步一起來(lái)學(xué)習(xí)一下前端Cookie,沒(méi)有熟練掌握的小伙伴看完這

    2024年02月04日
    瀏覽(31)
  • 一篇文章帶你了解SpringBoot目錄結(jié)構(gòu)

    一篇文章帶你了解SpringBoot目錄結(jié)構(gòu)

    前言 SpringBoot是整合Spring技術(shù)棧的一站式框架,是簡(jiǎn)化Spring技術(shù)棧的快速開(kāi)發(fā)腳手架,是一個(gè)能夠快速構(gòu)建生產(chǎn)級(jí)別的Spring應(yīng)用的工具。SpringBoot是目前流行的微服務(wù)框架,倡導(dǎo)“約定優(yōu)于配置”,簡(jiǎn)化Spring項(xiàng)目搭建及開(kāi)發(fā)過(guò)程。springboot提供了很多核心的功能,比如自動(dòng)化配置

    2024年03月25日
    瀏覽(90)
  • 一篇文章帶你走進(jìn)Java(保姆級(jí))

    一篇文章帶你走進(jìn)Java(保姆級(jí))

    手打不易,希望對(duì)各位還在徘徊學(xué)什么語(yǔ)言的有幫助?。ava不會(huì)讓你失望??! Java是一種優(yōu)秀的程序設(shè)計(jì)語(yǔ)言,它具有令人賞心悅目的語(yǔ)法和易于理解的語(yǔ)義。 Java還是有一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系,這個(gè)技術(shù)體系提供了完整的用于軟件開(kāi)發(fā)和跨平臺(tái)部署的支持

    2024年02月15日
    瀏覽(26)
  • 一篇文章帶你了解什么是圖靈完備

    圖靈完備(Turing-complete)是一個(gè)計(jì)算機(jī)科學(xué)中的概念,它指的是一種計(jì)算模型能夠模擬任何其他計(jì)算模型的能力。這意味著,只要一種計(jì)算模型是圖靈完備的,那么它就能夠完成任何可計(jì)算的任務(wù)。 圖靈完備是指一種計(jì)算機(jī)語(yǔ)言或計(jì)算模型具有足夠的能力來(lái)模擬圖靈機(jī)的所有

    2024年02月15日
    瀏覽(32)
  • 一篇文章帶你了解什么是JDK

    JDK(Java Development Kit)是Java開(kāi)發(fā)工具包,它提供了開(kāi)發(fā)和運(yùn)行Java應(yīng)用程序所需的工具、庫(kù)和資源。下面是JDK的一些重點(diǎn)介紹: Java編譯器(javac):JDK包含了Java編譯器,可以將Java源代碼編譯為Java字節(jié)碼。通過(guò)編譯器,開(kāi)發(fā)人員可以將Java源代碼轉(zhuǎn)換為可在JVM上運(yùn)行的字節(jié)碼文

    2024年03月19日
    瀏覽(32)
  • 一篇文章帶你快速認(rèn)識(shí)區(qū)塊鏈(必看)

    一篇文章帶你快速認(rèn)識(shí)區(qū)塊鏈(必看)

    ? ? ? ?區(qū)塊鏈技術(shù),這一劃時(shí)代的分布式賬本技術(shù),正在全球范圍內(nèi)掀起一場(chǎng)深度的信任與協(xié)作模式變革。區(qū)塊鏈如同一部由多方共同維護(hù)的公開(kāi)而又安全的大賬本,每一筆交易都被打包成一個(gè)區(qū)塊,通過(guò)高級(jí)密碼學(xué)手段確保傳輸和訪問(wèn)安全,并按照時(shí)間順序串聯(lián)起來(lái),形

    2024年04月25日
    瀏覽(34)
  • 一篇文章帶你了解-selenium工作原理詳解

    一篇文章帶你了解-selenium工作原理詳解

    前言 Selenium是一個(gè)用于Web應(yīng)用程序自動(dòng)化測(cè)試工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得

    2024年02月10日
    瀏覽(26)
  • 【C++】一篇文章帶你深入了解list

    【C++】一篇文章帶你深入了解list

    list是可以在常數(shù)范圍內(nèi)在任意位置進(jìn)行插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 list的底層是雙向鏈表結(jié)構(gòu),雙向鏈表中每個(gè)元素存儲(chǔ)在互不相關(guān)的獨(dú)立節(jié)點(diǎn)中,在節(jié)點(diǎn)中通過(guò)指針指向其前一個(gè)元素和后一個(gè)元素。 list與forward_list非常相似:最主要的不同在

    2024年04月23日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包