#pragma once #include<stdio.h> #include<stdlib.h> typedef int DataType; #define MAX_SIZE 100 typedef struct Stack { DataType _arr[MAX_SIZE];//栈的元素最大个数 int _top;//栈顶 int _bottom;//栈低 int len;//栈大小 }Stack,*Pstack; // 栈的初始化 void StackInit(Stack* s); // 入栈 void StackPush(Stack* s, DataType data); // 出栈 void StackPop(Stack* s); // 获取栈顶元素 DataType StackTop(Stack* s); // 获取栈中元素个数 int StackSize(Stack* s); // 检测栈是否为空 int StackEmpty(Stack* s);
test
#include"Stack.h" void StackInit(Stack* S) { S->_bottom = S->_top = 0; S->len = 0; } void StackPush(Stack* S, DataType data) { if(S->len == MAX_SIZE) { printf("栈满溢出,添加失败!\n"); return; } S->_top++; S->_arr[S->_top] = data; S->len++; printf(" %d 入栈成功!\n",data); } void StackPop(Stack* S) { if(S->len == 0) { printf("栈为空!\n"); return; } printf(" %d 出栈\n",S->_arr[S->_top]); S->_top--; S->len--; printf("此时栈顶元素为:%d\n",S->_arr[S->_top]); } DataType StackTop(Stack* S) { if(S->len == 0) { printf("栈为空!\n"); return; } printf("此时栈顶为: %d \n",S->_arr[S->_top]); } int StackSize(Stack* S) { int ret = 0; ret = printf("栈中元素个数为:%d\n",S->len); return ret; } int StackEmpty(Stack* S) { if(S->len == 0 ) { printf("栈为空!\n"); return 1; } else { printf("栈不为空!\n"); return 0; } }main
#include"Stack.h" test() { Stack S; StackInit(&S); StackPush(&S, 1); StackPush(&S, 2); StackPush(&S, 3); StackPush(&S, 4); StackPush(&S, 5); StackSize(&S); StackTop(&S); StackPop(&S); StackPop(&S); StackEmpty(&S); } int main() { test(); system("pause"); }
动态栈
Stack.c
#include "stack.h" #include "Maze.h" void StackInit(Stack *S,int capacity)//栈初始化 { S->arr = (DataType*)malloc(capacity*sizeof(DataType)); if(NULL == S->arr) { printf("申请空间失败!\n"); return; } S->capacity = capacity; S->size = 0; } void AddCapacity(Stack *S)//扩容 { if(NULL == S->arr) { printf("扩容失败\n"); return; } S->capacity = (DataType*)realloc(S->arr,sizeof(DataType)*(S->capacity)*2);//扩容为原来的二倍 if (NULL == S->arr) { printf("空间扩增失败!!!\n"); return; } S->capacity =2 * (S->capacity); } void PrintfStack(Stack *S)//打印栈 { int i = 0; if(NULL == S->arr) { printf("打印失败\n"); return; } for(;i<S->size;i++) { printf("%d\n",S->arr[i]); } printf("\n"); } void StackPush(Stack *S,DataType data)//入栈 { if(NULL == S->arr) { printf("入栈失败\n"); return; } if(S->capacity == S->size)//空间已满 { AddCapacity(S); } S->arr[S->size] = data; S->size++; } void StackPop(Stack *S)//出栈 { if(NULL == S->arr) { printf("出栈失败\n"); return; } S->size--; } DataType StackTop(PStack P)//获取栈顶元素 { return P->arr[P->size - 1]; /* int ret = 0; if(NULL == S->arr) { printf("获取栈失败\n"); return; } if(0 == S->size) { printf("栈为空!\n"); return; } printf("栈顶元素为:%d \n", S->arr[S->size - 1]);*/ } void StackSize(Stack *S)//获取元素个数 { if(NULL == S->arr) { printf("获取栈失败\n"); return; } printf("元素个数为:%d\n",S->size); } int StackEmpty(Stack *S)//检测栈是否为空 { if(NULL == S->arr) { printf("获取栈失败\n"); return 0; } if(S->size == 0) { printf("栈为空\n"); return 1; } return 0; }
Stack.h
#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef struct int DataType typedef struct Stack { DataType *_arr; int capacity; int size; }Stack; // 栈的初始化 void StackInit(Stack *S, int capacity); // 入栈 void StackPush(Stack *S, DataType data); // 出栈 void StackPop(Stack *S); // 获取栈顶元素 DataType StackTop(Stack *S); // 获取栈中元素个数 void StackSize(Stack *S); // 检测栈是否为空 int StackEmpty(Stack *S);