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...