common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<stdbool.h>
#define DataType int
typedef enum{FALSE, TRUE}BOOL;
#endif
TextMain.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"stack.h"
int main()
{
SeqStack st;
SeqStackInit(&st, STACK_DEFAULT_SIZE);
SeqStackPush(&st, 1);
SeqStackPush(&st, 2);
SeqStackPush(&st, 3);
SeqStackPush(&st, 4);
SeqStackPush(&st, 5);
SeqStackPush(&st, 6);
SeqStackPop(&st);
SeqStackPush(&st, 7);
SeqStackPush(&st, 8);
int val = SeqstackTop(&st);
SeqStackPop(&st);
SeqStackShow(&st);
SeqStackDestroy(&st);
system("pause");
return 0;
}
stack.h
#ifndef _STACK_H_
#define _STACK_H_
#include"common.h"
#define STACK_DEFAULT_SIZE 8
#define STACK_INC_SIZE 5
typedef struct SeqStack
{
DataType *base;
size_t capacity;
int top;
}SeqStack;
/功能函数,判断栈是否满
BOOL SeqStackFull(SeqStack *pst)
{
if (pst->top == pst->capacity)
return TRUE;
return FALSE;
}
BOOL SeqStackEmpty(SeqStack *pst)
{
if (pst->top == 0)
return TRUE;
return FALSE;
}
void SeqStackInit(SeqStack *pst, int sz);
void SeqStackPush(SeqStack *pst, DataType x);
void SeqStackShow(SeqStack *pst);
DataType SeqstackTop(SeqStack *pst);
void SeqStackPop(SeqStack *pst);
void SeqStackDestroy(SeqStack *pst);
void SeqStackInit(SeqStack *pst, int sz)
{
pst->capacity = sz > STACK_DEFAULT_SIZE ? sz : STACK_DEFAULT_SIZE;
pst->base = (DataType*)malloc(sizeof(DataType)*pst->capacity);
pst->top = 0;
}
void SeqStackPush(SeqStack *pst, DataType x)
{
if (SeqStackFull(pst))
{
printf("栈空间已满,%d不能插入\n", x);
return;
}
pst->base[pst->top++] = x;
}
void SeqStackShow(SeqStack *pst)
{
for (int i = pst->top - 1; i >= 0; --i)
{
printf("%d\n", pst->base[i]);
}
}
DataType SeqstackTop(SeqStack *pst)
{
if (SeqStackEmpty(pst))
{
printf("栈已空,无法查看\n");
}
return pst->base[pst->top - 1];
}
void SeqStackPop(SeqStack *pst)
{
if (SeqStackEmpty(pst))
{
printf("栈已空,无法出栈\n");
}
pst->base[pst->top--];
}
void SeqStackDestroy(SeqStack *pst)
{
free(pst);
free(pst->base);
}
#endif