您現在的位置是:首頁 > 綜藝首頁綜藝

資料結構與演算法——棧的定義

由 嵌入式講堂 發表于 綜藝2021-09-09
簡介}判斷棧(順序儲存)是否為空順序棧的入棧操作int push(sequence_stack st,datatype x){if(st->top==MAXSIZE) {return 0

共享棧和出棧什麼意思

持續分享嵌入式技術,作業系統,演算法,c語言/python等,歡迎小友關注支援

前面的文章我們已經介紹了線性表和連結串列的相關概念,本章小編打算講解一下棧的相關知識。棧在資料儲存中是佔有一席之地的,計算機在執行的過程中會頻繁的操作棧空間,進行一系列的出棧入棧的操作。那麼棧的結構究竟是怎樣的呢,我們一起來看下吧。

棧的定義

首先我們先來了解一下棧是怎麼定義的,它的資料結構是怎麼樣的,有什麼特點呢。

棧是一種特殊的線性表,規定它的插入運算和刪除運算均線上性表的同一端進行,

進行插入和刪除的那一端稱為棧頂,另一端稱為棧底。

棧的插入操作和刪除操作也分別簡稱

進棧和出棧。

棧是限定在一端(表尾)進行插入或刪除操作的線性表。

表尾端稱棧頂,表頭端稱棧底

。如下圖所示:

資料結構與演算法——棧的定義

棧的特點是資料的刪除和插入也叫進棧和出棧都是在棧頂進行操作的,也就是說最先進棧的資料最後才能出棧,這個叫做先進後出

(FILO, First In Last Out)

棧 具 有 後 進 先 出 或 先 進 後 出(FILO, First In Last Out)的性質

資料結構與演算法——棧的定義

棧的儲存結構

其實棧的儲存結構有兩種,一種叫順序棧,一種叫鏈式棧,本章小編主要介紹順序棧的相關操作。

首先我們先看下順序棧的定義

棧的順序儲存方式就是在順序表的基礎上對插入和刪除操作限制它們在順序表的同一端進行,所以同順序表一樣也可用一維陣列表示。

一般地,可以設定一個足夠大的一維陣列儲存棧,陣列中下標為0的元素就是棧底,對於棧頂,可以設一個指標top指示它。下面就是順序棧的儲存結構。

棧的順序儲存結構的C語言描述如下:

#define MAXSIZE 100typedef int datatype;typedef struct{ datatype a[MAXSIZE]; int top;}sequence_stack;sequence_stack st;

棧的相關操作主要有初始化,出棧,入棧等。下面我們就來一一舉例說明。

首先我們先來看下棧的初始化,以及判空的操作

void init(sequence_stack st) { st->top=0;}

初始化順序棧,top=0表示棧空,這種情況下棧頂指示位內容始終為空。

int empty(sequence_stack st) { return(st。top? 0:1);}

判斷棧(順序儲存)是否為空

順序棧的入棧操作

int push(sequence_stack st,datatype x){ if(st->top==MAXSIZE) { return 0; } st->a[st->top]=x; st->top++; return 1;}

順序棧的出棧操作

int pop( ){ if(st->top==0){ return 0; } st->top——; return 1;}

讀取順序棧棧頂

datatype read(sequence_stack st) {if (empty(st)){ printf(“\n棧是空的!”); exit(1);}else return st。a[st。top-1];}

以上就是順序棧的相關操作,可以看出很簡單,跟之前講述的線性表的操作沒有太大的區別,下一章我們繼續講述鏈式棧的資料結構及相關操作。

如果覺得這篇文章對你有幫助,請點贊關注下。如有錯誤歡迎指正