#include <stdio.h>
#include <malloc.h>
typedef int SElemType;
#define MAX_SIZE 20
//表示形式
typedef struct
{
SElemType *top;
SElemType *base;
int stacksize; //当前最大容量
}stackLine;
//创建
bool InitStack(stackLine* stack)
{
(*stack).base = (SElemType*)malloc(sizeof(SElemType)*MAX_SIZE);
if (!(*stack).base)
{
return false;
}
(*stack).top = (*stack).base;
(*stack).stacksize = MAX_SIZE;
return true;
}
//销毁
void DestroyStack(stackLine* stack)
{
free((*stack).base);
(*stack).base = NULL;
(*stack).top = NULL;
(*stack).stacksize = 0;
}
//清空
void ClearStack(stackLine* stack)
{
(*stack).top = (*stack).base = NULL;
}
//判空
bool StackEmpty(stackLine stack)
{
if (stack.base == stack.top)
{
return true;
}
return false;
}
//长度
int StackLenght(stackLine stack)
{
int nCount = 0;
while(stack.base != stack.top)
{
--stack.top;
nCount++;
}
return nCount;
}
//取值
SElemType GetTop(stackLine stack)
{
if (stack.base == stack.top)
{
return -1;
}
return *(stack.top - 1);
}
//压栈
void Push(stackLine* stack, SElemType val)
{
if ((*stack).top - (*stack).base >= (*stack).stacksize)
{
(*stack).base = (SElemType*)realloc((*stack).base,((*stack).stacksize + MAX_SIZE)*sizeof(SElemType));
if ((*stack).base == NULL)
{
return;
}
(*stack).top = (*stack).base + (*stack).stacksize;
(*stack).stacksize += MAX_SIZE;
}
*(*stack).top = val;
(*stack).top++;
}
//弹栈
SElemType Pop(stackLine* stack)
{
if ((*stack).base == (*stack).top)
{
return -1;
}
return *(--(*stack).top);
}
//遍历
void StackTraverse(stackLine stack)
{
while(stack.base != stack.top)
{
printf("%d\n",*(--stack.top));
}
}
int main()
{
stackLine stack = {0};
InitStack(&stack);
if (StackEmpty(stack))
{
printf("空\n");
}
Push(&stack,1);
Push(&stack,2);
Push(&stack,3);
Push(&stack,4);
Push(&stack,5);
printf("个数%d\n",StackLenght(stack));
printf("头%d\n",GetTop(stack));
StackTraverse(stack);
printf("pop:%d\n",Pop(&stack));
printf("pop:%d\n",Pop(&stack));
printf("pop:%d\n",Pop(&stack));
printf("个数%d\n",StackLenght(stack));
printf("头%d\n",GetTop(stack));
printf("pop:%d\n",Pop(&stack));
printf("pop:%d\n",Pop(&stack));
DestroyStack(&stack);
return 0;
}
顺序栈 代码
最新推荐文章于 2024-01-13 21:06:17 发布