出栈 int pop( seqStack*S, Stack Data &x)( 若栈空返回0,否则栈顶元素退出到x并返回1 if( stackEmpty()) return 0 (S->top); X=*(S->top); return 1
▪ 出栈 int pop (SeqStack *S, StackData &x) { //若栈空返回0, 否则栈顶元素退出到x并返回1 if ( StackEmpty(S) ) return 0; --(S->top); x = *(S->top); return 1; }
链式栈栈的链接表示 链式栈无栈满问题,空间可扩充 插入与删除仅在栈顶处执行 链式栈的栈顶在链头 适合于多栈操作 top
链式栈:栈的链接表示 ▪ 链式栈无栈满问题,空间可扩充 ▪ 插入与删除仅在栈顶处执行 ▪ 链式栈的栈顶在链头 ▪ 适合于多栈操作 top
链式栈( Linkstack)的定义 typedef int StackData; typedef struct node i StackData data 结点 struct node xlink:;/链指钅 3 StackNode typedef struct t StackNode *top; /栈顶指针 3 Linkstacks
链式栈 (LinkStack)的定义 typedef int StackData; typedef struct node { StackData data; //结点 struct node *link; //链指针 } StackNode; typedef struct { StackNode *top; //栈顶指针 } LinkStack;
链式栈操作实现 初始化 void Initstack( LinkStack *S)i S->top NULl 入栈 int Push( linkStack *S, StackData x )( StackNode p=( stackNode *)malloc sizeof( stackNode )) p->data=X; p->link=S->top S->top= p; return 1;
链式栈操作实现 ▪ 初始化 void InitStack ( LinkStack *S ) { S->top = NULL; } ▪ 入栈 int Push ( LinkStack *S, StackData x ) { StackNode *p = ( StackNode * ) malloc ( sizeof ( StackNode ) ); p->data = x; p->link = S->top; S->top = p; return 1; }
判栈空 int Stack Empty (Link Stack *S)t return S->top== NULL 出栈 int Pop( linkStack *S, StackData &x)& if( Stack Empty(S)) return 0 StackNode *p=S->top; S->top=p->link x=p->data; free (p) return 1
▪ 判栈空 int StackEmpty (LinkStack *S) { return S->top == NULL; } ▪ 出栈 int Pop ( LinkStack *S, StackData &x ) { if ( StackEmpty (S) ) return 0; StackNode * p = S->top; S->top = p->link; x = p->data; free (p); return 1; }