栈是一种特殊的线性表。
其一端称为栈顶,一段称为栈底。
栈的特点在于所有元素只能从栈顶进入(入栈),从栈顶出来(出栈)。
所以栈具有元素先进后出,后进先出的特点。
这种抽象的数据结构广泛用于计算机之中,比如写C语言的时候,编译器给自动分配的内存位于栈区,其操作方式即类似于栈的数据结构。
以下是栈的顺序存储结构实现
/*
栈的特点:入口和出口均在栈顶,先进后出
栈的顺序结构
函数:进栈;出栈
两栈共享空间
数据元素类型:int
*/
#include <stdio.h>
#include <Windows.h>
#define numMax 100
typedef struct stack
{
int data[numMax]; //存储的数据
int Top; //指向栈顶的位置,即最上面一个数据外一格
}stack;
typedef stack* Stack;
//打印栈的所有数据源
void showStack(Stack S);
//进栈的函数
void append(Stack S, int value);
//出栈的函数
int pop(Stack S);
void showStack(Stack S)
{
if (S->Top == -1)
{//如果S是空栈
printf("该栈是空栈!");
return;
}
printf("从栈底到栈顶:\n");
for (int i = 0; i < S->Top; i++)
{
printf("%d: %d\n", i+1, S->data[i]);
}
printf("\n\n");
}
void append(Stack S, int value)
{
if (S->Top == -1)
{//如果S是空栈
printf("该栈是空栈!");
return;
}
S->data[S->Top] = value;
S->Top++; //栈顶位置向上移一格
}
int pop(Stack S)
{
if (S->Top == -1)
{//如果S是空栈
printf("该栈是空栈!");
return;
}
S->Top--; //栈顶位置向下移一格
return S->data[S->Top]; //返回被出栈的数据
}
int main(void)
{
//初始化栈
Stack S = (Stack)malloc(sizeof(stack));
for (int i = 0; i < 10; i++)
{
S->data[i] = i + 1; //随便录入几个数据
S->Top = 10;
}
//打印栈
showStack(S);
//加入元素99并打印
append(S, 99);
showStack(S);
//栈顶元素出栈并打印
int k = pop(S);
printf("出栈元素:%d\n\n", k);
showStack(S);
system("PAUSE");
return 0;
}
参考:《大话数据结构》