main.c
#include "seqStack.h"
int main(int argc, const char *argv[])
{
StackPtr stack=create();
push(stack,3);
push(stack,8);
push(stack,13);
push(stack,33);
push(stack,60);
push(stack,55);
display(stack);
pop(stack);
display(stack);
return 0;
}
seqStack.c
#include "seqStack.h"
//创建栈区
StackPtr create(){
StackPtr stack=(StackPtr)malloc(sizeof(Stack));
if(stack==NULL){
printf("创建失败\n");
return NULL;
}
stack->data=(datatype *)malloc(sizeof(datatype)*MAX);
if(stack->data==NULL){
printf("创建失败\n");
return NULL;
}
bzero(stack->data,sizeof(datatype)*MAX);
stack->top=0;
printf("创建成功\n");
return stack;
}
//判空
int is_empty(StackPtr stack){
return stack->top==0;
}
//判满
int is_full(StackPtr stack){
return stack->top==MAX;
}
//入栈
void push(StackPtr stack,datatype e){
if(stack==NULL||is_full(stack)){
printf("入栈失败\n");
return;
}
stack->data[stack->top++]=e;
printf("入栈成功\n");
}
//出栈
void pop(StackPtr stack){
if(stack==NULL){
printf("出栈失败\n");
return;
}
stack->data[--stack->top]=0;
printf("出栈成功\n");
}
//遍历栈
void display(StackPtr stack){
if(stack==NULL){
printf("遍历失败\n");
return;
}
int length=stack->top;
while(length--){
printf("%d\t",stack->data[length-1]);
}
printf("\n");
}
//获取栈顶元素
datatype get_top(StackPtr stack){
if(stack==NULL||is_empty(stack)){
printf("获取失败\n");
return NULL;
}
return stack->data[stack->top-1];
}
//求栈的大小
int stack_size(StackPtr stack){
if(stack==NULL){
printf("获取失败\n");
return -1;
}
return stack->top;
}
//销毁栈
void destroy(StackPtr stack){
if(stack!=NULL){
if(stack->data!=NULL){
free(stack->data);
stack->data==NULL;
}
free(stack);
stack==NULL:
printf("销毁成功\n");
}
}
seqStack.h
#ifndef SEQSTACK
#define SEQSTACK
#include <myhead.h>
typedef int datatype;
#define MAX 10
typedef struct SeqStack{
datatype *data;
int top;
}Stack,*StackPtr;
//创建栈区
StackPtr create();
//判空
int is_empty(StackPtr stack);
//判满
int is_full(StackPtr stack);
//入栈
void push(StackPtr stack,datatype e);
//出栈
void pop(StackPtr stack);
//遍历栈
void display(StackPtr stack);
//获取栈顶元素
datatype get_top(StackPtr stack);
//求栈的大小
int stack_size(StackPtr stack);
//销毁栈
void destroy(StackPtr stack);
#endif