一.栈的定义
栈是一种操作受限制的线性表,将允许进行插入、删除的一端称为栈顶,另一端称为栈底。
二.栈的分类
栈主要分为静态栈和动态栈,静态栈类似于数组,而动态栈类似于链表,但只能对链表的一端进行操作。本文主要讨论静态栈。
三.静态栈的表示
#define stack_size 100
typedef int SDataType;//假设栈内元素为整型。
typedef struct stack
{
SDataType array[stack_size];
int top;
}stack;
四.栈的操作
#ifndef STACK_H_
#define STACK_H_
#include<assert.h>
#include<stdio.h>
#define Max_Size 100
typedef int SDataType;
typedef struct Stack
{
SDataType array[Max_Size];
int top;
}Stack;
//初始化
void InitStack(Stack *s)
{
s->top = 0;
}
//打印
void PrintS(Stack s)
{
if (s.top == 0)
{
printf("空栈\n");
return;
}
int i = 0;
for (; i < s.top; i++)
{
printf("%d ", s.array[i]);
}
printf("\n");
}
//销毁
void StackDestroy(Stack *s)
{
s->top = 0;
}
//入栈
void StackPush(Stack *s,SDataType data)
{
assert(s->top < Max_Size);
s->array[s->top++] = data;
}
//出栈
void StackPop(Stack *s)
{
assert(s->top > 0);
s->top--;
}
//判断是否是空栈,是,返回1;不是,返回0.
int Isempty(Stack s)
{
if (s.top == 0)
{
return 1;
}
else
{
return 0;
}
}
//返回栈内元素的个数
int Scount(Stack s)
{
return s.top;
}
//取栈顶元素
SDataType TopStack(Stack s)
{
if (s.top == 0)
{
return -1;
}
return s.array[s.top - 1];
}
void test1()
{
Stack s;
InitStack(&s);
StackPush(&s, 1);
//StackPop(&s);
PrintS(s);
StackDestroy(&s);
PrintS(s);
//printf("%d\n",TopStack(s));
}
#endif