顺序表示的栈——顺序栈1——内容介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36669549/article/details/84319888

        栈(stack)是一种操作受限的线性表。栈除了具有线性表的结构特点:除了第一个元素和最后一个元素外,其他元素只有一个前驱元素和一个后继元素。栈的限制在于它只允许在表的一端进行插入和删除运算。在日常生活中,有许多栈的例子,进制转换、表达式求值、括号匹配使用等都是栈的“后进先出”设计思想。

【定义】

        栈(stack),也叫堆栈,它是限定仅在表尾进行插入和删除操作的线性表。对于栈来说,表尾(允许操作的一端)称为栈顶(top),另一端称为栈低(bottom)。栈顶是动态变换的,它是由一个称为栈顶指针(top)的变量指针指示。当表中没有元素时,称为空栈。
        栈的插入操作称为入栈或进栈,删除操作称为出栈或退栈。

        在栈S=(a1,a2,...,an)中,a1称为栈底元素,an称为栈顶元素,由栈顶指针top指示。栈中的元素按照a1,a2,...,an的顺序入栈,当前的栈顶元素为an。如图所示。

        按照存储方式,可以将栈分为顺序栈和链式栈。采用顺序存储结构的栈称为顺序栈,与顺序表一样,可以用数组存储顺序栈中的元素,同时增加一个栈顶指针top,指向栈顶元素。当top=0时表示空栈。

        当栈中元素已经有StackSize个时,称为栈满。如果继续进行入栈操作会产生溢出,则称为上溢。对空栈进行出栈操作,称为下溢。

【特点】

       栈是一种后进先出(Last In First Out, LIFO)的线性表。最先入栈的元素一定位于栈低,最后入栈的元素一定成为栈顶。每次删除的元素是栈顶元素,也就是最后入栈的元素。

【存储结构】

#define StackSize 100
typedef struct
{
      DataType stack[StackSize];
      int top;
}SeqStack;

【操作】

void InitStack(SeqStack *S)
/*初始化栈*/
{
	S->top = 0;
}
int StackEmpty(SeqStack S)
/*判断是否为空*/
{
	if (S.top==0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int GetTop(SeqStack S,DataType *e)
/*取栈顶元素*/
{
	if (S.top<=0)
	{
		cout << "栈已经空了!" << endl;
		return 0;
	}
	else
	{
		*e = S.stack[S.top - 1];
		return 1;
	}
}
int PushStack(SeqStack *S,DataType e)
/*将元素e入栈*/
{
	if (S->top>=StackSize)
	{
		cout << "栈已经满,不能讲元素入栈!" << endl;
		return 0;
	}
	else
	{
		S->stack[S->top] = e;
		S->top++;
		return 1;
	}
}

int PopStack(SeqStack *S, DataType *e)
/*将栈顶元素出栈,赋值给e*/
{
	if (S->top==0)
	{
		cout << "栈中已经没有元素,不能进行出栈操作!" << endl;
		return 0;
	}
	else
	{
		S->top--;
		*e = S->stack[S->top];
		return 1;
	}
}
int StackLength(SeqStack S)
/*求栈的长度*/
{
	return S.top;
}

void ClearStack(SeqStack *S)
/*清空栈*/
{
	S->top = 0;
}

猜你喜欢

转载自blog.csdn.net/baidu_36669549/article/details/84319888