北方民族大学数据结构与算法课件第三章 栈和队列.pptVIP

  • 0
  • 0
  • 约1.35万字
  • 约 76页
  • 2019-05-06 发布于广东
  • 举报

北方民族大学数据结构与算法课件第三章 栈和队列.ppt

第三章栈和队列 栈 队列 递归 栈 ( Stack ) 定义:是限定仅在表尾进行插入或删除操作的线性表。 允许插入和删除的一端 称为栈顶(top),另一端 称为栈底(bottom) 特点:后进先出 (LIFO) 栈的主要操作 Push (S, x); //进栈 Pop (S); //出栈 Top (S); //取栈顶 Setnull (S); //置空栈 Empty (S); //判栈空否 StackFull (S); //判栈满否 } 栈的表示和实现 顺序栈:栈的顺序存储结构,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,指针top指向栈顶元素在顺序栈中的下一个位置, base为栈底指针,指向栈底的位置。 顺序栈的类型表示: #define maxsize 64 typedef char datatype; typedef struct { //顺序栈定义 { datatype data[maxsize] ; int top; //栈顶指针 } seqstack; seqstack *s ; 判栈空 int Empty (seqstack *S) { if( S-top =0 ) return 1 //判栈空,空则返回1 else return 0; //否则返回0 } 判栈满 int StackFull (seqstack *S) { if( S-top==maxsize -1 ) return 1 ; //判栈满,满则返回1 else return 0; //否则返回0 } 入栈 Seqstack *Push (seqstack *S, datatype x) //插入元素x为新的栈顶元素 { if (S-top= =maxsize - 1) { printf (“overflow”) ; return null ; } else { S-top + + ; S-data[S-top ] = x ; } return s ; } 取栈顶元素 Datatype Top (seqstack *S ) //若栈空返回0, 否则栈顶元素读到x并返回 { if ( Empty(S) ) { printf (“stack is empty”) ; return null; } else return (S-data[S-top ] ); } 出栈 datatype pop (seqstack *S ) //若栈空返回0, 否则栈顶元素退出到x并返回1 { if ( Empty(S) ) { printf (“ underflow ”) ; return null; } else { S-top --; return (S-data[S-top +1] ) ;} } 链式栈:栈的链接表示 链式栈无栈满问题,空间可扩充 插入与删除仅在栈顶处执行 链式栈的栈顶在链头 适合于多栈操作 链式栈 (LinkStack)的定义 typedef int datatype; typedef struct node { datatype data; //结点 struct node *next; //链指针 } linkstack; linkstack *top; 链式栈操作实现 入栈 Linkstack * Push ( linkstack *top, datatype x ) { linkstack *p ; *p = malloc( sizeof ( linkstack) ); p-data = x; p-next = top; return p; } 出栈 Linklist *Pop ( LinkStack *S, datatype x ) { linkstack *p ; if ( top = = null )

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档