数据结构:栈.ppt
《数据结构:栈.ppt》由会员分享,可在线阅读,更多相关《数据结构:栈.ppt(30页珍藏版)》请在课桌文档上搜索。
1、数据结构,栈,单链表,所有结点通过指针的链接而构成的线性表称为单链表。线性表(a1,a2,an,)的单链表可直观地画成:head是单链表的头指针,指向开始结点a1,an是终端结点,其指针域为空,不指向任何结点。一个单链表由头指针head唯一标识和确定,因此,可用头指针来命名单链表。,循环链表,循环链表(circular linked list)是一种首尾相接的链表,将单链表表尾结点原来的空指针改为指向表头结点,就成为循环链表。循环链表并不多占存储单元,但从循环链表的任一个结点出发都可以访问到此链表的每一个结点,因为当访问到表尾结点后又能返回到头结点。,1.带头指针的循环链表,通常在循环链表的表
2、头结点前面再加一个空结点,也叫空表头结点。表空时空表头结点的指针指向其本身,如下面的图所示为空循环链表。空表头结点除指针以外的数据域是没有用的,但为了将此结点与一般结点相区别,常常是将其赋以一个特别的数据,以与一般结点相区别。,2.带尾指针的循环链表,另一种方法是不设头指针而改设尾指针,这样无论是找头结点还是尾结点都很方便。因为尾结点由尾指针rear来指示,则头结点的位置是rear-next-next。,双链表,双向链表中每个结点除了有向后指针外,还有指向其前一个结点的指针,这样形成的链表中有两条不同方向的链,因此从某一结点均可向两个方向访问。双链表的结点形式为:其中链域prior和next分
3、别指向本结点的直接前趋和直接后继结点。,如果循环链表的结点再采用双向指针,就成为双向循环链表。,栈,堆栈(Stack),堆栈简称为栈,是限定在表的一端进行插入或删除操作的线性表。进行插入或删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。插入元素又称为入栈(push),删除元素操作称为出栈(pop)。不含元素的栈称为空栈。堆栈元素的插入和删除只在栈顶进行,总是后进去的元素先出来,所以堆栈又称为后进先出线性表或LIFO(Last-In-First-Out)表。,堆栈的表示,堆栈的最简单的表示方法是采用一维数组,为形象起见,一般在图中将堆栈画成竖直的。设数组名为STACK,其下标的
4、下界为1,上界为n。一般需用一个变量top记录当前栈顶的下标值,top也叫做栈指针。,本例中top=4,1.入栈(push),入栈的主要操作是先将栈顶指针加1;然后将入栈元素放到栈顶指针所指示下标值的位置上。设用下标从1到n的数组ST表示堆栈,入栈的元素值为G,则可得到入栈函数如下:,入栈函数,void push(ST,int n,top,G)if(top=n)printf(“栈溢出!n”);/*显示栈满信息*/else top=top+1;STtop=G;,2.出栈(Pop),出栈运算时,先将栈顶的元素值赋给某个变量,以备后面的运算应用;然后栈顶指针减1,将栈顶位置下移。假设已指定的变量为x
5、,则出栈的函数如下:,出栈函数,void pop(ST,int top,x)if(top=0)printf(“空栈!n”);/*栈为空显示相应的信息*/else x=STtop;top=top-1;/*栈顶位置下移*/,设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,以下出栈序列不可能出现的是【】,a,b,c,e,d,f,g b,c,a,f,e,g,d a,e,d,c,b,f,g d,c,f,e,b,a,g g,e,f,d,c,b,a,3.3.1 链堆栈,链堆栈是栈的链式存储表示,它是只允许在表头进行插入和删除运算的单链表。它与普通的单链表没有什么不同,只是将头指针head改称为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构

链接地址:https://www.desk33.com/p-229825.html