1. 栈的定义:
栈作为一种限定性顺序表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许插入、删除操作的一端称为栈顶(Top),因此栈顶的位置是动态变化的,它由一个称为栈顶指针的位置指示器来表示。同时,表的另一端被称为栈底(Bottom)。当栈中没有元素时称为空栈。栈的插入操作被形象的称为进栈或入栈、删除操作称为出栈或退栈。
2、栈的表示和实现——顺序栈
顺序栈是用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须设置一个空指针 _top(栈顶指针)来动态的表示栈顶元素在顺序栈中的位置。通常以_top=-1表示空栈。
定义如下:
#define MAX 100
typedef int DATATYPE;
typedef struct Stack {
DATATYPE a[MAX];
int _top;
}PStack,*Stack;
3- - - -顺序栈的一些操作
(1)初始化顺序栈:
void StackInit(Stack s)
{ //构造一个空栈 _top=-1 为空栈
s->_top = -1;
}
(2)顺序栈进栈运算:
Stack StackPush(Stack s, DATATYPE data)
{
if (s->_top == MAX-1)
{
printf("栈已满!!!\n");
return 0;
}
s->_top++;
s->a[s->_top] = data;
return s;
}
(3)顺序栈出栈运算:
Stack StackPop(Stack s)
{
if (s->_top == -1)
{
printf("栈为空!!!\n");
return 0;
}
s->_top--;
return s;
}
(4)打印该顺序栈:
void PrintStack(Stack s)
{
int i = s->_top;
if (s->_top == -1)
{
printf("栈为空!!!\n");
return;
}
do
{
printf("%d--->", s->a[i]);
i--;
} while (i>=0);
printf("\n");
}
(5)测试入栈与出栈操作:
void TestPopPush()
{
PStack s;
StackInit(&s);
PrintStack(&s);
StackPush(&s, 1);
StackPush(&s, 2);
StackPush(&s, 3);
StackPush(&s, 4);
StackPush(&s, 5);
StackPush(&s, 6);
PrintStack(&s);
StackPop(&s);
PrintStack(&s);
}
(6)运行结果:
- 以上为栈的的一些基本操作,如有错误,欢迎大家指出,共同学习来提高编程能力!