在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解數據結構中棧的定義和操作

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-04-27 14:04 ? 次閱讀

1.棧的定義

棧(stack):是只允許在一端進行插入或者刪除操作的線性表(即后進先出,大概可以理解為吃飽了吐出來)

空棧:不含元素的空標配

棧頂:表尾端

棧底:表頭端

dfc737aa-e4c0-11ed-ab56-dac502259ad0.png

進棧順序:a1->a2->a3->a4->a5

出棧順序:a5->a4-a3->a2->a1

2. 對比線性表和棧基本操作

2.1 線性表的基本操作

InitList (&L): 初始化表。構造一個空的線性表 L,分配內存空間

DestoryList (&L): 銷毀操作。銷毀線性表,并且釋放線性表 L 所占用的空間

ListInsert (&L,i,e): 插入操作,在表 L 中的第 i 個位置上插入指定元素 e

ListDelete (&L,i,e): 刪除操作,刪除表 L 中的第 i 個位置的元素,并且用 e 返回刪除元素的值

LocateElem (L,e): 按值查找操作,在表 L 中查找具有給定關鍵字值的元素

GetElem (L,i): 按位查找操作,獲取表 L 中第 i 個位置的元素的值

2.2 棧的基本操作

InitStack (&S): 初始化棧,構造一個空棧 S,分配內存空間

DestoryStack (&S): 銷毀棧,銷毀并釋放棧 S 所占用的內存空間

Push (&S,x): 進棧,若棧 S 未滿,則將 x 加入使之成為新的棧頂

Pop (&S,&x): 出棧,若棧 S 非空,則彈出棧頂元素,并用 x 返回

GetTop (S,&x): 讀棧頂元素,若棧 S 非空,則用 x 返回棧頂元素

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

3. 順序棧

dfe74b12-e4c0-11ed-ab56-dac502259ad0.png

3.1 順序棧的定義

#define MaxSize 10           //定義棧中元素的最大個數 
typedef struct{
 ElemType data[MaxSize];   //靜態數組存放棧中的元素
    int top;      //棧頂指針
}SqStack;         //結構體重命名

聲明一個順序棧后就會在內存中分配一整片連續的空間,其中內存大小為:MaxSize*sizeof (ELemType)

void testStack(){
 SqStack S; //聲明一個順序棧
}

3.2 棧的初始化操作

由于棧頂指針 top 需要指向此時棧頂元素,所以讓 top 指向 0 是不合理的,可以初始化讓 top 指向 - 1; 判斷一個棧是否為空,即判斷 S.top 是否等于 - 1 初始化棧:

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

判斷棧空:

bool StackEmpty(SqStack S){
    if(S.top==-1)      //棧空
        return true;
    else 
        return false;  //非空
}

3.3 進棧操作

分析:

判斷棧是否為空

棧頂指針 + 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. 共享棧

兩個棧共享同一片空間

#define MaxSize 10           //定義棧中元素的最大個數 
typedef struct{
 ElemType data[MaxSize];   //靜態數組存放棧中的元素
    int top0;     //0號棧棧頂指針
    int top1;     //1號棧棧頂指針
}SqStack;         //結構體重命名
初始化棧:
void InitStack(ShStack &S){
 S.top0=-1;
 S.top1=MaxSize;
}

5. 鏈棧的定義

進棧 / 出棧都只能在棧頂一段進行

鏈頭作為棧頂

typedef struct Linknode{
 ElemType data;           //數據域
    struct Linknode *next;   //指針域
}*LiStack                    //棧類型定義






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40190

原文標題:詳解數據結構中棧的定義和操作

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一文詳解Linux的各種

    (push) 和 彈出 (pop) 操作。根據的特點,很容易的想到可以利用數組,來實現這種數據結構。但是本文要討論的并不是軟件層面的,而是硬件層面的
    發表于 09-28 14:51 ?1327次閱讀

    數據結構

    1.數據結構的概念 所謂數據結構是指由某一數據對象及該對象中所有數據成員之間的關系組成的集合。成員之間的關系有很多種,最常見的是前后件關系。 2.
    發表于 03-04 14:13

    大話數據結構pdf下載

    大話數據結構是一本很值得初學者看的編程書籍,用簡單的語言然人深刻的理解數據結構,強烈程序員推薦下載收藏,下面是部分內容預覽: 完整的pdf格式電子書下載: 《大話數據結構》.pdf
    發表于 07-04 00:33

    收藏 | 程序員面試,你必須知道的8大數據結構

    本文我們介紹了應對程序員面試過程,必須掌握的幾大數據結構。幾乎所有的問題都需要面試者對數據結構有深刻的理解。無論你是初入職場的新兵(剛從大學或者編程培訓班畢業),還是擁有幾十年經驗的職場老鳥。有些
    發表于 09-30 09:35

    常見的數據結構

    的,那樣對于數據的使用簡直是個悲劇。針對此類數據數據結構提供了圖存儲結構,專門用于存儲這類數據。二、
    發表于 05-10 07:58

    數據結構之鏈式介紹

    數據結構之鏈式鏈式鏈式定義鏈式操作的實現鏈
    發表于 12-17 08:11

    數據結構鏈表的基本操作

    嵌入式學習基礎-數據結構鏈表的基本操作鏈表節點采用結構體的方式進行定義,下面是最基礎的定義只有一個數據
    發表于 12-22 08:05

    java數據結構學習

    數據結構是對計算機內存數據的一種安排,數據結構包括 數組, 鏈表, , 二叉樹, 哈希表等,算法則對對這些
    發表于 11-29 09:46 ?798次閱讀

    什么是數據結構?為什么要學習數據結構數據結構的應用實例分析

    本文檔的主要內容詳細介紹的是什么是數據結構?為什么要學習數據結構數據結構的應用實例分析包括了:數據結構在串口通信當中的應用,數據結構在按鍵
    發表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數據結構</b>?為什么要學習<b class='flag-5'>數據結構</b>?<b class='flag-5'>數據結構</b>的應用實例分析

    什么是?數據結構如何實現

    今天放松一下,我們來看看數據結構,這節的知識點可以說是數據結構中最容易上手的知識點了,其實比起鏈表,其實鏈表也有和隊列的模型,鏈表的
    發表于 04-29 18:25 ?0次下載
    什么是<b class='flag-5'>棧</b>?<b class='flag-5'>數據結構</b><b class='flag-5'>中</b><b class='flag-5'>棧</b>如何實現

    數據結構堆棧出序列問題解析

    這是工作遇到的小問題。 數據結構中有一種數據類型堆棧,該結構數據項有如下特點: 除了最前面
    的頭像 發表于 10-19 15:46 ?3400次閱讀
    <b class='flag-5'>數據結構</b><b class='flag-5'>中</b>堆棧出<b class='flag-5'>棧</b>序列問題解析

    如何解決數據結構設計最大頻率問題?

    讀完本文,可以去力扣解決如下題目: 895.最大頻率(Hard) ? 我個人很喜歡設計特殊數據結構的問題,畢竟在工作中會經常用到基本數據結構,而設計類的問題就非常考驗對基本數據結構
    的頭像 發表于 03-02 11:02 ?1443次閱讀

    SystemVerilog可以嵌套的數據結構

    SystemVerilog除了數組、隊列和關聯數組等數據結構,這些數據結構還可以嵌套。
    的頭像 發表于 11-03 09:59 ?1640次閱讀

    數據結構解決滑動窗口問題

    前文用 [單調解決三道算法問題]介紹了單調這種特殊數據結構,本文寫一個類似的數據結構「單調隊列」。 也許這種數據結構的名字你沒聽過,其
    的頭像 發表于 04-19 10:50 ?683次閱讀
    <b class='flag-5'>數據結構</b>解決滑動窗口問題

    Linux的進程、線程、內核以及中斷

    (push) 和 彈出 (pop) 操作。根據的特點,很容易的想到可以利用數組,來實現這種數據結構。但是本文要討論的并不是軟件層面的,而是硬件層面的
    的頭像 發表于 05-14 09:30 ?742次閱讀
    Linux<b class='flag-5'>中</b>的進程<b class='flag-5'>棧</b>、線程<b class='flag-5'>棧</b>、內核<b class='flag-5'>棧</b>以及中斷<b class='flag-5'>棧</b>
    主站蜘蛛池模板: 日本xxxxxxxx69 | 手机看片www xiao2b cm | 亚洲色图激情 | 欧美成人在线网站 | 午夜高清 | 美国bj69video18视频 | 黄色在线播放视频 | 免费又黄又硬又大爽日本 | 国产精品99r8在线观看 | 成人国产永久福利看片 | 亚洲国产综合人成综合网站00 | 欧美三级黄视频 | 欧美色视频超清在线观看 | 级毛片 | 在线观看886影院成人影院 | 欧美色频 | 久久精品草 | 色色色色色网 | 国产精品9999久久久久仙踪林 | 亚洲一区二区三区在线播放 | 亚洲一区二区三区四区五区六区 | 伊人五月婷婷 | 欧美精品网 | 四虎在线永久免费观看 | 国产福利vr专区精品 | 日产乱码免费一卡二卡在线 | 99久久精品国产自免费 | 四虎影视色费永久在线观看 | 成人性生活免费视频 | 都市禁忌猎艳风流美妇 | 日本黄色免费 | 一区二区美女视频 | 国产女同| 四虎影视大全免费入口 | 手机看片1024福利 | 成人爽a毛片在线视频 | 四虎永久免费最新在线 | 国产成人在线网址 | 免费高清在线爱做视频 | 日本免费的一级绿象 | 午夜影网 |