栈一共有两种储存结构
1.顺序栈
2.链栈
顺序栈
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附指针top指示栈顶元素在顺序栈的位置。通常top=0表示空栈。
用C语言描述是,因为不能确定整个过程中所需最大空间的大小,所以我们可以设一个初始容量,在栈的空间不够时在逐段扩大。
定义一个顺序栈
typedef struct Stack
{
Elemtype data[Init_Stack_Size];
Elemtype len;
Elemtype StackSize;
int top;
int bottom;
}Stack;
基本操作
初始化栈
判空
输出栈
入栈
出栈
输出栈中元素个数
输出栈顶元素
//初始化栈
void InitStack(Stack *S) {
S->top = 0;
S->bottom = S->top;
S->len = 0;
S->StackSize = Init_Stack_Size;
}
//判断是否为空
bool IsEmpty(Stack *S)
{
if (S->top == 0)
return true;
else
return false;
}
//输出栈
void show(Stack *S)
{
if (IsEmpty(S))
printf("该栈为空\n");
else
{
int p = S->top;
while (p)
{
printf("输出的元素:%d\n", S->data[p]);
p--;
}
}
}
//入栈
void Push(Stack *S, Elemtype x)
{
S->top++;
S->data[S->top] = x;
S->len++;
}
//出栈
void Pop(Stack *S)
{
if (IsEmpty)
printf("此栈为空");
else
{
printf("输出的元素:%d\n", S->data[S->top]);
S->top--;
S->len--;
}
}
//输出栈中元素个数
void GetStackSize(Stack *S)
{
printf("一共有%d个元素\n", S->len);
}
//返回栈顶元素
void GetFirstElem(Stack *S)
{
if (IsEmpty(S))
printf("该栈为空");
else
printf("栈顶元素为%d\n", S->data[S->top]);
}
测试一下
测试代码:
for (int i = 0; i < 5; i++)
Push(&S, i);
GetFirstElem(&S);
GetStackSize(&S);
show(&S);
结果: