数据结构:栈
作为本人新开的类型,我就思考了很久,最后决定写与数据结构有关的博客。说到数据结构,我们首先想到的就是栈。
不 怎 么 华 丽 的 分 割 线
一、简介
栈,是只能在某一端插入和删除的特殊线性表。
栈和我们平时生活中的桶类似,先堆进来的压在底下,随后一件一件地往上堆。取走时,只能从上面一件一件地取走。**(先进先出)**无论是堆还是取,都在顶部进行,底部一般是不动的。
栈是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一端称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称后进先出表(LIFO表)。
二、栈的实现
一个栈可以用定长为n的数组s来表示,用一个栈顶指针top指向栈顶。若top=0,表示栈空,top=0时栈满。进栈时top加1,退栈时top减1。当top<0时,为下溢(是否避免应看实际情况)。栈指针在运算中永远指向栈顶。
1、进栈(PUSH)算法:
过程一:若top=n时,则给出溢出信息,作出处理(进栈前首先检查栈是否已满,满则会溢出,不满则进行过程二);
过程二:top++(栈指针加1,指向进栈地址);
过程三:s[top]=x,结束(x为新进栈的元素)。
2、退栈(POP)
过程一:若top<=0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈,空则会下溢,不空则作过程二);
过程二:x=s[top](退栈后的元素赋给x);
过程三:top–,结束(栈指针减1,指向栈顶)。
实现过程程序(C++):
#define n 100
void push(int s[],int *top,int *x) //入栈
{
if(*top==n) printf("overflow"); //判断会不会溢出,会则输出提示“overflow”;
else
{
(*top)++;
s[*top]=*x