栈的顺序存储结构
1.代码如下:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
typedef int data_t;
typedef struct sqstack
{
int data[SIZE];
int top;
}sqstack;
//创建
sqstack * creat_stack()
{
sqstack * stack = malloc(sizeof(sqstack));
if(stack == NULL)
{
printf("申请空间失败!\n");
return NULL;
}
stack->top = -1;
return stack;
}
//判空
int isnull(sqstack * stack)
{
return stack->top == -1;
}
//判满
int isfull(sqstack * stack)
{
return stack->top == SIZE - 1;
}
//压栈
int push_stack(sqstack * stack, int data)
{
if(isfull(stack))
{
printf("表为满,无法进行压栈操作!\n");
return -1;
}
stack->top++;
stack->data[stack->top] = data;
return 0;
}
//弹栈
int pop_stack(sqstack * stack,int *data)
{
if(isnull(stack))
{
printf("表为空,无法进行弹栈操作!\n");
return -1;
}
*data = stack->data[stack->top];
stack->top--;
return 0;
}
// 打印
int print_stack(sqstack * stack)
{
int i;
if(isnull(stack))
return -1;
for(i = 0; i <= stack->top; i++ )
{
printf("%d ",stack->data[i]);
}
printf("\n");
return 0;
}
//清空
int clean_stack(sqstack * stack)
{
stack->top = -1;
return 0;
}
//销毁
int dis_stack(sqstack * stack)
{
clean_stack(stack);
free(stack);
return 0;
}
int main(int argc, const char *argv[])
{
sqstack * stack = creat_stack();
int i,data;
for(i = 0; i < 10; i++)
{
push_stack(stack,i);
}
print_stack(stack);
for(i = 0; i < 5; i++)
{
pop_stack(stack,&data);
printf("%d ",data);
}
printf("\n");
print_stack(stack);
clean_stack(stack);
print_stack(stack);
dis_stack(stack);
return 0;
2.运行结果如下: