資料結構---棧(C語言陣列實現)
阿新 • • 發佈:2018-10-31
https://blog.csdn.net/morixinguan/article/details/51374184
資料結構---棧(C語言陣列實現)
棧的全名稱為堆疊,棧其實就是與佇列相反的過程,佇列是先進先出,而棧便是先進後出了,如下圖:
棧的基礎實現:
1、棧的初始化
2、判斷棧是否為空
3、判斷棧是否已經滿了
4、入棧
5、出棧
程式碼如下:
#include <stdio.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int #define SIZE 1024 static int stack[SIZE] = {0}; static index = 0; int Is_Empty(void); int Is_Full(void); int push(int value); int pop(int *value); int top(int *value); int main(void) { int i; int buffer[5] = {1, 2, 3, 4, 5}; printf("入棧前:\n"); for(i = 0; i < 5; i++) { printf("stack[%d]=%d\n", i, stack[i]); } int temp; for(i = 0; i < 5; i++) { push(buffer[i]); } printf("入棧後:\n"); for(i = 0; i < 5; i++) { printf("stack[%d]=%d\n", i, stack[i]); } printf("出棧後:\n"); while(1) { if (pop(&temp)) break; printf("%d\n", temp); } printf("top:%d\n", top(&temp)); getchar(); return 0; } int Is_Empty(void) { //判斷棧是否為空 return index == 0; } int Is_Full(void) { //判斷棧是否已經滿了 return index == SIZE -1; } int push(int value) { //入棧,先判斷是否已經滿了,滿了就返回1 if(Is_Full()) return 1; //否則將數值入棧 stack[index] = value; index++; return 0; } int pop(int *value) { //出棧,判斷是否為空,為空就返回1 if (Is_Empty()) return 1; //否則出棧 *value = stack[--index]; return 0; } int top(int *value) { //判斷棧頂的值 if (Is_Empty()) return 1; *value = stack[index-1]; return 0; }