C語言學習 資料結構(棧的實現)

2021-10-23 14:39:21 字數 3656 閱讀 4845

c語言學習-資料結構(棧的實現)

1、棧的簡述

棧是一種資料結構,它可以用來存放數字,一次只能存放乙個數字。

一次只能向棧裡加入乙個數字。可以棧裡獲得乙個數字,一次只能獲得乙個數字。

棧裡的數字有前後順序,先進入的數字在前,後進入的數字在後。

每次從棧裡獲得數字必須是最後放進去的數字。

這種使用規則叫後進先出。

編寫棧的時候需要提供乙個push函式,它負責向棧裡加入乙個數字,

還需要提供乙個pop函式,它負責從棧裡獲得乙個數字。

2 、棧的實現

1  #include 

2 #include

3//可以使用鏈式物理結構儲存棧中的資料,也可以用

4//順序物理結構儲存棧中的數字

5typedef

struct

stack_t;

11//棧的初始化函式

12void

stack_init

(stack_t* p_stack)

1317

//棧的清理函式

18void

stack_deinit

(stack_t* p_stack)

1923

//獲取棧中數字的個數

24int

stack_size

(const stack_t* p_stack)

2528

//判斷棧是否為空

29int

stack_empty

(const stack_t* p_stack)

3033

//判斷棧是否滿

34int

stack_full

(const stack_t* p_stack)

3539

//向棧中插入數字

40int

stack_push

(stack_t* p_stack,

int val)

4146

//在棧中最後的位置加入數字

47 p_stack->buf[p_stack->count]

= val;

48//將棧中的數字個數加1

49 p_stack->count++;50

return1;

51}52//從棧中獲得數字,同時把數字從棧中刪除

53int

stack_pop

(stack_t* p_stack,

int*p_val)

5459

//獲取陣列中的最後乙個數字

60*p_val = p_stack->buf[p_stack->count -1]

;61//數字個數減一

62 p_stack->count--;63

return1;

64}65//從棧中獲得乙個數字,不會刪除數字

66int

stack_top

(const stack_t* p_stack,

int* p_val)

6772

*p_val = p_stack->buf[p_stack->count -1]

;73return1;

74}7576

77int

main

(void)78

;81int val =0;

82stack_init

(&stack)

;83 size =

stack_size

(&stack);84

printf

("棧中的數字個數是%d\n"

,size);85

printf

("判斷空的結果是%d\n"

,stack_empty

(&stack));

86printf

("判斷滿的結果是%d\n"

,stack_full

(&stack));

8788

stack_push

(&stack,

100)

;89 size =

stack_size

(&stack);90

printf

("棧中的數字個數是%d\n"

,size);91

printf

("判斷空的結果是%d\n"

,stack_empty

(&stack));

92printf

("判斷滿的結果是%d\n"

,stack_full

(&stack));

9394

stack_push

(&stack,

200);95

stack_push

(&stack,

300);96

stack_push

(&stack,

400);97

stack_push

(&stack,

500);98

stack_push

(&stack,

600)

;99 size =

stack_size

(&stack)

;100

printf

("棧中的數字個數是%d\n"

,size)

;101

printf

("判斷空的結果是%d\n"

,stack_empty

(&stack));

102printf

("判斷滿的結果是%d\n"

,stack_full

(&stack));

103104

stack_top

(&stack,

&val)

;105

printf

("最後乙個數字是%d\n"

,val)

;106

107while(1

)108

112113 size =

stack_size

(&stack)

;114

printf

("棧中的數字個數是%d\n"

,size)

;115

printf

("判斷空的結果是%d\n"

,stack_empty

(&stack));

116printf

("判斷滿的結果是%d\n"

,stack_full

(&stack));

117stack_deinit

(&stack)

;118

return0;

119}

3 程式的輸出結果:

棧中的數字個數是0

判斷空的結果是1

判斷滿的結果是0

棧中的數字個數是1

判斷空的結果是0

判斷滿的結果是0

棧中的數字個數是6

判斷空的結果是0

判斷滿的結果是0

最後乙個數字是600

棧中的數字600 棧中的數字500 棧中的數字400 棧中的數字300 棧中的數字200 棧中的數字100 棧中的數字個數是0

判斷空的結果是1

判斷滿的結果是0

C語言學習之資料結構棧的實現

本文和大家分享的主要是c 語言資料結構中 學習c語言 有所幫助。在函式呼叫的過程中,需要的就是先進後出的特點,因此,棧就出現了。棧是一種資料結構,是計算機怎麼處理程式執行的一種方式。具有先進後出的特點,下面看的就是這些抽象的資料結構怎麼用c 語言 來實現,棧能實現,那麼其他的資料結構也就自然可以用 ...

資料結構 棧的實現(C語言)

棧的實現 棧的結構可以是基於陣列的。它擁有兩個基本操作 出棧和入棧。而實現操作需要乙個 top 表示頂點。很簡單 上 include define maxsize 20 typedef int elemtype typedef int status typedef struct sqstack st...

資料結構 C語言棧的實現

首先,我們要先回顧乙個知識,對於後面棧的學習會好理解點,如果我們在main 函式中定義了乙個變數 int a 需要在乙個自定義的函式中改變其值,要怎麼操作?include stdio.h include stdlib.h intmain intadd int a 我會首先想到這種方法,將改變後的值r...