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