資料結構 棧的操作例項詳解

2022-10-04 00:57:10 字數 2439 閱讀 1823

資料結構 棧的操作例項詳解

說明:往前學習資料結構,想執行乙個完整的順序棧的程式都執行不了,因為書上給的都是一部分一部分的演算法,並沒有提供乙個完整可執行的程式,聽了實驗課,自己折騰了一下,總算可以寫乙個比較完整的順序棧操作的小程式,對於棧也慢慢開始有了感覺。下面我會把整個程式拆開來做說明,只要把這些**放在乙個檔案中,用編譯器就可以直接編譯執行了。

一、實現

1.程www.cppcns.com序功能

關於棧操作的經典程式,首當要提及進製數轉換的問題,利用棧的操作,就可以十分快速地完成數的進製轉換。

2.預定義、標頭檔案匯入和型別別名

**如下:

#include

#include

#define overflow -1

#define error 0

#define false 0

#define true 1

#define ok 1

typedef int elemtype;

typedef int status;

除了兩個標頭檔案的匯入是必須的之外,下面做兩點說明:

(1)其餘的常量定義都是可選的,為的就是在下面的**書寫過程中可以盡量使用英文來表達程式的意思,而不是在**的實現過程中直接使用數字,依個人喜歡,也可以直接使用數字;

(2)使用typedef做型別的別名也僅僅是為了程式中**的意思更加清晰明了而已,實際也可以不這樣使用;

3.順序棧的定義

**如下:

typedef struct sqstack; //順序棧名稱

4.棧的初始化

**如下:

status initstack_sq(sqstack &s, int size, int inc)

5.空棧的判斷

**如下:

status stackempty_sq(sqstack s)

//空棧的決斷是,如果棧為空就返回1,否則就返回0,當然可以不這樣規定;

//至於為什麼要做空棧的判斷,自然是有原因的,下面再看程式的**時就可以知道了。

6.入棧

**如下:

status push_sq(sqstack &s, elemtype e)

s.elem[s.top] = e; //將e元素入棧

s.top++; //使s.top加1,表示指向的是棧頂位標

return ok; //上面操作正常後返回1

}7.出棧

**如下:

status pop_sq(sqstack &s, elemtype &e)

8.進製轉換的函式

其實程式設計客棧上面的步驟操作都是為了建立乙個順序棧和定義順序棧的操作而已,並對可能出現的各種情況做一些相應的舉措,完畢後,下面就要使用上面建立的順序棧以及棧的操作介面了,即在數制轉換函式(這裡是十進位制轉八進位制)中使用上面的操作介面,**如下:

void converstion(int n) //理論基礎為除8取餘法

while(stackempty_sq(s) == false)

9.main函式

進製轉換函式呼叫棧操作的介面函式,以實現在數制轉換過程中棧的操作;main函式呼叫數制轉換函式,以實現數制的轉換,**如下:

int main(void)

二、執行

有了上面的**後,就可以在編譯器中編譯執行了,這裡我是用c free 5來進行程式**的編譯:

(1)輸入的數為1348時的結果:

(2)輸入的數為2526時的結果:

三、完整的**

下面把**都放在一起:

#include

#include

#define overflow -1

#define error www.cppcns.com0

#define false 0

#define true 1

#definwww.cppcns.come ok 1

typedef int elemtype;

typedef int status;

typedef struct sqstack;

status initstack_sq(sqstack &s, int size, int inc)

status stackempty_sq(sqstack s)

status push_sq(sqstack &s, elemtype e)

s.elem[s.top] = e;

s.top++;

return ok;}

status pop_sq(sqstack &s, elemtype &e)

void converstion(int n)

while(stackempty_sq(s) == false)}

int main(void)

本文標題: 資料結構 棧的操作例項詳解

本文位址:

資料結構 棧的操作

include include define maxsize 100 設順序表的最大長度為100,可依具體情況分配空間 define null 1 typedef int datatype typedef struct datatype stack maxsize int top 棧頂指標 seqs...

資料結構 鏈棧的操作

1.malloc函式 要求返回位元組數,並且強制轉換為指標型別。2.是指標型別訪問用到的,而.是物件型別訪問得到的。3.記得count 包括 鏈棧結點的定義,鏈棧的定義,進棧,出棧。include include define maxsize 50 using namespace std typed...

資料結構 3 棧的操作

棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...