/* * SeqStack.h * * Created on: 2019年8月1日 * Author: Administrator */ #ifndef SEQSTACK_H_ #define SEQSTACK_H_ //数组去模拟栈的顺序存储, 有数组的后面模拟栈顶 ,避免数据频繁移动 #define MAX_SIZE 1024 #define SEQ_STACK_TRUE 1 #define SEQ_STACK_FALSE 0 typedef struct SEQSTACK { void *data[MAX_SIZE]; int size; } SeqStack; //栈的初始化 SeqStack *Init_SeqStack(); //入栈 void Push_SeqStack(SeqStack *stack, void *data); //返回栈顶元素 void *Top_SeqStack(SeqStack *stack); //出栈 void Pop_SeqStack(SeqStack *stack); //判断是否为空 int IsEmpty(SeqStack *stack); //返回栈中元素个数 int Size_SeqStack(SeqStack *stack); //清空栈 void Clear_SeqStack(SeqStack *stack); //销毁 void FreeSpace_SeqStack(SeqStack *stack); #endif /* SEQSTACK_H_ */
/* * SeqStack.c * * Created on: 2019年8月1日 * Author: Administrator */ #include "SeqStack.h" #include <stdlib.h> #include <stdio.h> #include <string.h> //栈的初始化 SeqStack *Init_SeqStack() { SeqStack *stack = (SeqStack *)malloc(sizeof(SeqStack)); for(int i = 0; i < MAX_SIZE; i++){ stack->data[i] = NULL; } stack->size = 0; return stack; } //入栈 void Push_SeqStack(SeqStack *stack, void *data) { if(stack == NULL){ return; } if(stack->size == MAX_SIZE) { return; } if(data == NULL){ return; } stack->data[stack->size] = data; stack->size++; } //返回栈顶元素 void *Top_SeqStack(SeqStack *stack) { if(stack == NULL){ return NULL; } if(stack->size == 0){ return NULL; } return stack->data[stack->size-1]; } //出栈 void Pop_SeqStack(SeqStack *stack) { if(stack == NULL){ return; } if(stack->size == 0){ return; } stack->data[stack->size-1] = NULL; stack->size--; } //判断是否为空 int IsEmpty(SeqStack *stack) { if(stack == NULL){ return -1; } if(stack->size == 0){ return SEQ_STACK_TRUE; } return SEQ_STACK_FALSE; } //返回栈中元素个数 int Size_SeqStack(SeqStack *stack) { return stack->size; } //清空栈 void Clear_SeqStack(SeqStack *stack) { if(stack == NULL){ return; } for(int i = 0;i < stack->size; i++){ stack->data[i] = NULL; } stack->size = 0; } void FreeSpace_SeqStack(SeqStack *stack){ if(stack == NULL){ return; } free(stack); }
/* * main.c * * Created on: 2019年8月1日 * Author: Administrator */ #include "SeqStack.h" #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct PERSON { char name[64]; int age; } Person; int main(){ printf("栈 \n"); //建立栈 SeqStack *stack = Init_SeqStack(); //建立数据 Person p1 = {"Jarvis1", 11}; Person p2 = {"Jarvis2", 12}; Person p3 = {"Jarvis3", 13}; Person p4 = {"Jarvis4", 14}; Person p5 = {"Jarvis5", 15}; //入栈 Push_SeqStack(stack, &p1); Push_SeqStack(stack, &p2); Push_SeqStack(stack, &p3); Push_SeqStack(stack, &p4); Push_SeqStack(stack, &p5); //输出 while(Size_SeqStack(stack) > 0) { //访问栈顶元素 Person *person = (Person *)Top_SeqStack(stack); printf("Name: %s, Age: %d \n", person->name, person->age); //弹出栈顶元素 Pop_SeqStack(stack); } //释放内存 FreeSpace_SeqStack(stack); system("pause"); return 0; }