(5)取栈顶元素 datatype Top Seqstack(SeqStack *s) i if(Empty SeqStack(s) return o 栈空 else return(s->data[s->topD) 2021年1月21日 数据结构讲义
2021年1月21日 数据结构讲义 11 ⑸取栈顶元素 datatype Top_SeqStack(SeqStack *s) { if (Empty_SeqStack(s)) return 0; /*栈空*/ else return(s->data[s->top]); }
几点说明: 1.对于顺序栈,入栈时,首先判栈是否满了,栈 满时,不能入栈;否则出现空间溢出,引起错误 这种现象称为上溢。 栈满的条件为:s>top== MAXSIZE-1 2.出栈和读栈顶元素操作,先判栈是否为空,为 空时不能操作,否则产生错误。通常栈空时常作为「 一种控制转移的条件 2021年1月21日 数据结构讲义
2021年1月21日 数据结构讲义 12 几点说明: 1. 对于顺序栈,入栈时,首先判栈是否满了,栈 满时,不能入栈; 否则出现空间溢出,引起错误, 这种现象称为上溢。 栈满的条件为:s->top= =MAXSIZE-1 2. 出栈和读栈顶元素操作,先判栈是否为空,为 空时不能操作,否则产生错误。通常栈空时常作为 一种控制转移的条件
2链栈 ◆通常链栈用单链表表示,因此其结点结构与单链表的 结构相同: typedef struct node i datatype data; struct node *next. ] Node, x Link Stack, 说明top为栈顶指针: Link Stack top 八 ◆因为栈中的主要运算是在栈顶插入、删除,显烈在链 表的头部做栈顶是最方便的,而且没有必要象单链表那 样为了运算方便附加一个头结点。通常将链栈表示成图 的形式。 2021年1月21日 数据结构讲义 13
2021年1月21日 数据结构讲义 13 通常链栈用单链表表示,因此其结点结构与单链表的 结构相同: typedef struct node { datatype data; struct node *next; }StackNode, * LinkStack; 说明top为栈顶指针: LinkStack top ; 因为栈中的主要运算是在栈顶插入、删除,显然在链 表的头部做栈顶是最方便的,而且没有必要象单链表那 样为了运算方便附加一个头结点。通常将链栈表示成图 的形式。 ⒉链栈
(1)置空栈 Link Stack Init LinkStack() i return NULL, (2判栈空 int Empty Link Stack ( Link Stack top i if(top==-l return 1 else return 0 2021年1月21日 数据结构讲义
2021年1月21日 数据结构讲义 14 ⑴置空栈 LinkStack Init_LinkStack( ) { return NULL; } ⑵判栈空 int Empty_LinkStack(LinkStack top) { if (top==-1) return 1; else return 0; }
(3)入栈 LinkStack Push Link Stack(Link Stack top, datatype x) i StackNode S-malloc(sizeof( StackNode) S->data=x S->next=top top-s, return top 2021年1月21日 数据结构讲义 15
2021年1月21日 数据结构讲义 15 ⑶入栈 LinkStack Push_LinkStack(LinkStack top, datatype x) { StackNode *s; s=malloc(sizeof(StackNode)); s->data=x; s->next=top; top=s; return top; }