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