上一篇文章分享了链表的实际应用,今天我来分享一下栈的实际应用吧,栈其实是一种特殊的线性表。栈有顺序栈和链式栈,这里谈的是顺序栈(也是最常见和常用的)。栈的特点是先进先出,因此也它的功能也就没有链表那么多啦。下面是栈的一个实际应用例子(包括压栈,出栈,计算栈的长度以及栈的删除)
完整源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//栈里元素个数
#define SIZE 10
//栈的声明
struct stack {
int sta[SIZE];
int top;
};
//栈的初始化
void init_stack(struct stack* s)
{
memset(s->sta, 0, sizeof(s->sta));
s->top = -1;
}
//压栈
int in_stack(struct stack* s, int data)
{
if (s->top == SIZE - 1) {
printf("the stack is full. \n");
return 1;
}
(s->top)++;
s->sta[s->top] = data;
return 0;
}
//出栈
int out_stack(struct stack* s)
{
int tmp;
if (s->top < 0) {
printf("the stack is empty. \n");
return -1;
}
else {
tmp = (s->sta)[s->top];
(s->top)--;
return tmp;
}
}
//计算栈的长度
int StackLength(stack *s){
if(s == NULL){
return -1;
}
return s -> top+1;
}
//栈的删除
void destory(struct stack* s)
{
s->top = -1;
memset(s->sta, 0, sizeof(s->sta));
}
int main()
{
struct stack S;
init_stack(&S);
int i, ret;
printf("请输入数据\n");
int deta;
for (int i = 0; i < 10; i++)
{
scanf("%d", &deta);
ret = in_stack(&S, deta);
if (ret > 0)
{
printf("in_stack err. \n");
exit(1);
}
}
printf("StackLength():%d\n",StackLength(&S) );
for (i = 0; i < SIZE; i++)
{
ret = out_stack(&S);
if (ret < 0)
{
printf("out_stack err. \n");
exit(1);
}
printf("%d\t", ret);
}
printf("\n");
destory(&S);
return 0;
}
程序执行效果图:
本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览。