SeqStack.h文件
#ifndef SEQSTACK_H #define SEQSTACK_H //栈的结构体 typedef struct _SeqStack { void** data;//可以动态的开辟内存 int length;//栈的大小 int capacity;//容量 }SeqStack; //初始化 SeqStack* Creat_SeqStack(int capacity); //入栈 void Push_SeqStack(SeqStack* stack,void* data); //出栈 void Pop_SeqStack(SeqStack* stack); //获得栈顶元素 void* Top_SeqStack(SeqStack* stack); //获得栈大小 int Size_SeqStack(SeqStack* stack); //获得栈的容量 int Capacity_SeqStack(SeqStack* stack); //判断栈是否为空 int IsEmpty_SeqStack(SeqStack* stack); //销毁栈 void Destroy_SeqStack(SeqStack* stack); #endif
SeqStack.c文件
#include <stdio.h> #include <stdlib.h> #include "SeqStack.h" //初始换栈:创建栈 SeqStack* Creat_SeqStack(int capacity) { SeqStack* stack=(SeqStack*)malloc(sizeof(SeqStack)); stack->data=(void**)malloc(sizeof(void*)*capacity); if(stack->data==NULL) { return NULL; } stack->length=0; stack->capacity=capacity; return stack; } //入栈 void Push_SeqStack(SeqStack* stack,void* data) { if(stack==NULL||data==NULL) { return ; } if(stack->length==stack->capacity) { return ; } stack->data[stack->length]=data; stack->length++; } //出栈 void Pop_SeqStack(SeqStack* stack) { if(stack==NULL) { return; } stack->data[stack->length-1]=NULL; stack->length--; } //获得栈顶元素 void* Top_SeqStack(SeqStack* stack) { if(stack==NULL) { return NULL; } return stack->data[stack->length-1]; } //获得栈大小 int Size_SeqStack(SeqStack* stack) { if(stack==NULL) { return -1; } return stack->length; } //获得栈的容量 int Capacity_SeqStack(SeqStack* stack) { if(stack==NULL) { return -1; } return stack->capacity; } //判断栈是否为空 int IsEmpty_SeqStack(SeqStack* stack) { if(stack==NULL) { return -1; } if(stack->length==0) { return 1; } return 0; } //销毁栈 void Destroy_SeqStack(SeqStack* stack) { if(stack==NULL) { return; } if(stack->data!=NULL) { free(stack->data); stack->data=NULL; } free(stack); return ; }
testSeqStack.c文件测试栈的顺序存储
#include <stdio.h> #include"SeqStack.h" //自定义数据 typedef struct _Player { char name[128]; int age; }Player; int main() { //创建栈 SeqStack* stack = Creat_SeqStack(200); //创建数据 Player p1={"aaa",10}; Player p2={"bbb",20}; Player p3={"ccc",30}; //数据入栈 Push_SeqStack(stack,&p1); Push_SeqStack(stack,&p2); Push_SeqStack(stack,&p3); //打印 while(Size_SeqStack(stack)>0) { Player* p=(Player*)Top_SeqStack(stack); Pop_SeqStack(stack); printf("Name:%s Age:%d\n",p->name,p->age); } //销毁 Destroy_SeqStack(stack); return 0; }