二維碼
微世推網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 快報(bào)資訊 » 今日解答 » 正文

詳解數(shù)據(jù)結(jié)構(gòu)中棧的定義和操作

放大字體  縮小字體 發(fā)布日期:2023-05-05 19:13:14    作者:郭永亮    瀏覽次數(shù):398
導(dǎo)讀

本文分享自華為云社區(qū)《數(shù)據(jù)結(jié)構(gòu):詳細(xì)講解棧得定義、棧得操作-云社區(qū)-華為云》,感謝作者分享: 高彬滔 。1.棧得定義棧(stack):是只最優(yōu)在一端進(jìn)行插入或者刪除操作得線性表(即后進(jìn)先出,大概專業(yè)理解為吃飽了

本文分享自華為云社區(qū)《數(shù)據(jù)結(jié)構(gòu):詳細(xì)講解棧得定義、棧得操作-云社區(qū)-華為云》,感謝作者分享: 高彬滔 。

1.棧得定義

棧(stack):是只最優(yōu)在一端進(jìn)行插入或者刪除操作得線性表(即后進(jìn)先出,大概專業(yè)理解為吃飽了吐出來)

空棧:不含元素得空標(biāo)配棧頂:表尾端棧底:表頭端進(jìn)棧順序:a1->a2->a3->a4->a5出棧順序:a5->a4-a3->a2->a12.對(duì)比線性表和?;静僮?.1 線性表得基本操作InitList(&L):初始化表。構(gòu)造一個(gè)空得線性表L,分配內(nèi)存空間DestoryList(&L):銷毀操作。銷毀線性表,并且釋放線性表L所占用得空間ListInsert(&L,i,e):插入操作,在表L中得第i個(gè)位置上插入指定元素eListDelete(&L,i,e):刪除操作,刪除表L中得第i個(gè)位置得元素,并且用e返回刪除元素得值LocateElem(L,e):按值查找操作,在表L中查找具有給定關(guān)鍵字值得元素GetElem(L,i):按位查找操作,獲取表L中第i個(gè)位置得元素得值2.2 棧得基本操作InitStack(&S):初始化棧,構(gòu)造一個(gè)空棧S,分配內(nèi)存空間DestoryStack(&S):銷毀棧,銷毀并釋放棧S所占用得內(nèi)存空間Push(&S,x):進(jìn)棧,若棧S未滿,則將x加入使之成為新得棧頂Pop(&S,&x):出棧,若棧S非空,則彈出棧頂元素,并用x返回GetTop(S,&x):讀棧頂元素,若棧S非空,則用x返回棧頂元素

其他常見操作: StackEmpty(S):判斷一個(gè)棧S是否為空,若S為空,則返回true,否則返回false

3.順序棧3.1順序棧得定義

#define MaxSize 10 //定義棧中元素得蕞大個(gè)數(shù) typedef struct{ ElemType data[MaxSize]; //靜態(tài)數(shù)組存放棧中得元素 int top; //棧頂指針}SqStack; //結(jié)構(gòu)體重命名

聲明一個(gè)順序棧后就會(huì)在內(nèi)存中分配一整片連續(xù)得空間,其中內(nèi)存大小為:MaxSizegovsizeof(ELemType)

void testStack(){ SqStack S; //聲明一個(gè)順序棧}3.2棧得初始化操作

由于棧頂指針top需要指向此時(shí)棧頂元素,所以讓top指向0是不合理得,專業(yè)初始化讓top指向-1;判斷一個(gè)棧是否為空,即判斷S.top是否@于-1

初始化棧:

void Inittack(SqStack){ SqStack S; //聲明一個(gè)順序棧 S.top=-1;}

判斷??眨?/p>

bool StackEmpty(SqStack S){ if(S.top==-1) //??? return true; else return false; //非空}3.3進(jìn)棧操作

分析:

判斷棧是否為空棧頂指針+1新元素入棧

bool Push(SqStack &S,ElemType x){ if(S.top==NaxSize-1) return false; S.top+=1; S.data[S.top]=x; return true;}3.4出棧操作

bool Push(SqStack &S,ElemType &x){ if(S.top==-1) return false; x=S.data[S.top--]; return true;}3.5讀棧頂元素操作

bool GetTop(SqStack &S,ElemType &x){ if(S.top==-1) return false; x=S.data[S.top]; return true;}4.共享?xiàng)?p>兩個(gè)棧共享同一片空間

#define MaxSize 10 //定義棧中元素得蕞大個(gè)數(shù) typedef struct{ ElemType data[MaxSize]; //靜態(tài)數(shù)組存放棧中得元素 int top0; //0號(hào)棧棧頂指針 int top1; //1號(hào)棧棧頂指針}SqStack; //結(jié)構(gòu)體重命名

初始化棧:

void InitStack(ShStack &S){ S.top0=-1; S.top1=MaxSize;}5.鏈棧得定義進(jìn)棧/出棧都只能在棧頂一段進(jìn)行鏈頭作為棧頂

typedef struct linknode{ ElemType data; //數(shù)據(jù)域 struct linknode govnext; //指針域}govLiStack //棧類型定義

關(guān)注#華為云開發(fā)者聯(lián)盟# 點(diǎn)擊下方,第壹時(shí)間了解華為云新鮮技術(shù)~

華為云博客_大數(shù)據(jù)博客_AI博客_云計(jì)算博客_開發(fā)者中心-華為云

 
(文/郭永亮)
免責(zé)聲明
本文為郭永亮原創(chuàng)作品?作者: 郭永亮。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://m.nyqrr.cn/kbzx/show-120956.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
 

Copyright?2015-2023 粵公網(wǎng)安備 44030702000869號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

24在線QQ: 770665880

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

韓瑞 小英 張澤

工作時(shí)間:

周一至周五: 08:00 - 24:00

反饋

用戶
反饋