栈是限定仅在表尾进行插入或删除操作的线性表。栈为先进后出特点的线性表。
栈的储存结构可以类似于一个顺序表。
栈的基本操作有入栈、出栈、判断栈空、取栈顶。
入栈:将栈顶指针向上移动,将入栈元素传入栈内。
出栈:将栈顶指针向下移动,实现出栈。
通过栈顶指针是否为-1来判断栈是否为空。
取栈顶:通过返回栈顶指针指向的元素来实现。
代码实现:
typedef struct seqstact
{
int data[MAX];
int top;
}seq;
/**创建栈**/
void Inits(seq *s)
{
s=(seq *)malloc(sizeof(seq));
s->top=-1;//将栈顶指针指向-1
}
/**判断栈空**/
int emptys(seq *s)
{
if(s->top==-1)
return 0;//若栈空,返回0
return 1;//否则返回1
}
/**入栈**/
void adds(seq *s,int x)
{
if(s->top==MAX-1)
{
printf("栈满,不能入栈!\n");
}
else
{
s->top++;//栈首指针+1
s->data[s->top]=x;
}
printf("入栈成功!\n");
}
/**出栈**/
void pops(seq *s)
{
if(emptys(s))
{
printf("栈空,不能出栈操作!\n");
}
else
{
printf("%d",s->data[s->top]);
s->top--;//栈首指针-1
}
}
/**取栈顶元素**/
void tops(seq *s)
{
if(emptys(s))
{
printf("栈空!\n");
}
else
{
printf("%d",s->data[s->top]);
}
}
/**输出栈**/
void prins(seq *s)
{
int n=0;
if(emptys(s))
{
printf("栈空!\n");
}
else
{
while(n<=s->top)
{
printf("%d\t",s->data[s->top]);
n++;
}
}
}
运行结果: