DS之栈 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

    对于栈的理解,早就在上C++课的时候,程老师就给我们做过简单的介绍和使用,今年接触了数据结构这本书,有了一个全面的学习,不得不说是一本很难啃的一本书,但是为了写出更好的程序代码,这门课是在所难免的,

DS之栈

    在数据结构中,栈是一类重要的抽象数据类型。从数据结构角度看,栈也是一种线性结构,属于线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表。从数据类型角度看,它和线性表是大不相同的抽象的多型数据类型。

    栈的定义

    栈(stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。假设栈S=(a1,a2,a3,...,an),则称a1为栈底元素,an为栈顶元素。栈中元素按a1,a2,...,an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈又称为后进先出的线性表。下面的图很好的解释了这个原则。

   

    <喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICDVu7XEse3KvrrNyrXP1jwvcD4KPHA+ICAgICAgICC6zc/f0NSx7cDgJiMyMDI4NDujrNW70rLT0MG91ta05rSise3Kvre9t6ihozwvcD4KPHA+ICAgICAgICAgy7PQ8tW7PC9wPgo8cD4gICAgICAgIM/IwLTLtdK7z8LLs9Dy1bujury01bu1xMuz0PK05rSiveG5ucrHwPvTw9K71+m12Na3wazQ+LXEtOa0orWl1KrSwLTOtOa3xdTa19TVu7XXtb3Vu7altcTK/b7d1KrL2KOszazKsbi9yejWuNXrdG9wse3KvtW7tqXUqsvY1NrLs9Dy1bvW0LXEzrvWw6GjdG9wzqrVu7al1rjV66OsxuSz9cq8JiMyMDU0MDvWuM/y1bu116Osw7+1sbLlyOvQwrXE1bu2pdSqy9jKsaOs1rjV63RvcNT2MS7JvrP91bu2pdSqy9jKsaOs1rjV63RvcLz1MaOs0vK0y6Ost8e/1dW71tC1xNW7tqXWuNXryrzW1dTa1bu2pdSqy9i1xM/C0ru49s671sPJz6Gjz8LD5rXEzby63LrDtcTLtcP3wcvLs9Dy1bvW0Mr9vt3UqsvYus3Vu7al1rjV69auvOS1xLbU06a52M+1oaM8L3A+CjxwIGFsaWduPQ=="center">

    链栈

    顺序栈在运算过程中可能发生“溢出”现象(上溢和下溢),即存在栈满以后就不能再进栈的问题,这时候就用到了栈的链式存储结构,也就是所谓的链栈,

电脑资料

DS之栈》(http://meiwen.anslib.com)。其各结点的结构与单链表中的结点结构完全相同。结点包括两个域:其中的存储数据元素的信息的域称为数据域,存储直接后继存储位置的域称为指针域。指针域中存储的信息叫做指针或链。在这里学过链表的知识就会知道链栈是怎样实现基本操作的,下面的图很好的解释了这个问题。

   

    一顺序栈的定义

    通常的习惯做法是以top=0表示空栈。由于栈在使用过程中所需最大空间的大小难以估计,在初始化设空栈时不应限定栈的最大容量。一个较合理的做法就是:先为栈分配一个基本容量,然后再应用的过程中,当栈的空间不够使用时再逐段扩大。为此,可以设定两个常量:STACK_INIT_SIZE(存储空间初始分配量)和STACKINCREMENT(存储空间分配增量)。

<span style="font-size:18px;">#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量typedef int SElemType;//重新定义SElemType为int型typedef struct{//重新定义SqStck为结构类型	SElemType *base;//栈底指针	SElemType *top;//栈顶指针	int stacksize;//栈的当前可使用的最大容量}SqStack</span>

    二链栈的定义

    链栈最重要的就是结点类型的定义和实现

<span style="font-size:18px;">typedef int ElemType;//重新定义ElemType为int型typedef struct node//重新定义node为结构类型{	ElemType date;//定义的结点的数据域	struct node *next;//定义的结点的指针域}node,*pointer;//定义的指向node结构类型指针变量pointer</span>

最新文章