日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

堆栈总结

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆栈总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 堆棧
      • 什么是堆棧
      • 堆棧的抽象數據類型描述
      • 棧的順序存儲實現

堆棧

什么是堆棧

計算機如何進行表達式求值?
算術表達式5+6/2-3*4。
正確理解:
5+6/2-3*4 = 5+3-3*4 = 8-3*4 = 8-12 = -4
由兩類對象構成的:
運算數,如2、3、4
運算符號,如+、-、*、/ ? 不同運算符號優先級不一樣
后綴表達式
中綴表達式:運算符號位于兩個運算數之間。如 ,a + b * c - d / e
后綴表達式:運算符號位于兩個運算數之后。如, a b c *+ d e /-
后綴表達式求值策略:從左向右“掃描”,逐個處理運算數和運算符號
1. 遇到運算數怎么辦?如何“記住”目前還不未參與運算的數?
2. 遇到運算符號怎么辦?對應的運算數是什么?
6 2 / 3 - 4 2 *+ = ?
6/2-3+4*2
注意后綴的運算數是緊挨著運算符號之前的兩個數
啟示:需要有種存儲方法,能順序存儲運算數, 并在需要時“倒序”輸出!
堆棧(Stack):
具有一定操作約束的線性表 只在一端(棧頂,Top)做 插入、刪除
插入數據:入棧(Push)
刪除數據:出棧(Pop)
后入先出:Last In First Out(LIFO)

堆棧的抽象數據類型描述

類型名稱: 堆棧(Stack)

數據對象集:一個有0個或多個元素的有窮線性表。

操作集:長度為MaxSize的堆棧S Stack,堆棧元素item ElementType

1、Stack CreateStack( int MaxSize ): 生成空堆棧,其最大長度為MaxSize;
2、int IsFull( Stack S, int MaxSize ):判斷堆棧S是否已滿;
3、void Push( Stack S, ElementType item ):將元素item壓入堆棧;
4、int IsEmpty ( Stack S ):判斷堆棧S是否為空;
5、ElementType Pop( Stack S ):刪除并返回棧頂元素

Push 和 Pop 可以穿插交替進行;
按照操作系列 (1)Push(S,A), Push(S,B),Push((S,C),Pop(S),Pop(S),Pop(S) 堆棧輸出是? CBA

(2) 而Push(S,A), Pop(S),Push(S,B),Push((S,C),Pop(S),Pop(S) 堆棧輸出是? ACB

棧的順序存儲實現

棧的順序存儲結構通常由一個一維數組和一個記錄 棧頂元素位置的變量組成。
1.入棧 2.出棧 3.判斷 棧滿 棧空

typedef int Position; struct SNode {ElementType *Data; /* 存儲元素的數組 */Position Top; /* 棧頂指針 */int MaxSize; /* 堆棧最大容量 */ }; typedef struct SNode *Stack;Stack CreateStack( int MaxSize ) {Stack S = (Stack)malloc(sizeof(struct SNode));S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));S->Top = -1;//top值為零說明棧里有一個元素,-1代表堆棧空S->MaxSize = MaxSize;return S; }bool IsFull( Stack S ) {return (S->Top == S->MaxSize-1); }bool Push( Stack S, ElementType X ) {if ( IsFull(S) ) {printf("堆棧滿");return false;}else {S->Data[++(S->Top)] = X;return true;} }bool IsEmpty( Stack S ) {return (S->Top == -1); }ElementType Pop( Stack S ) {if ( IsEmpty(S) ) {printf("堆棧空");return ERROR; /* ERROR是ElementType的特殊值,標志錯誤 */}else return ( S->Data[(S->Top)--] ); }

堆棧的其他應用:
函數調用及遞歸實現
深度優先搜索
回溯算法
。。。

總結

以上是生活随笔為你收集整理的堆栈总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。