之链式( 3、链式:用链表实现的线 (2)链式的基本操作建线: 建立空栈 LKSTACK top top=NULL;
栈之链式栈(cont’d) 3、链式栈:用链表实现的栈 (2) 链式栈的基本操作(建栈): LKSTACK top; top=NULL; • 建立空栈
之链式c( 3、链式线:用链表安现的栈 (3)链式线的基本操作(入: 入栈 int push (lKstaCK*top elemtype e) &NODEPTR p p=(NODEPTR)malloc(LEn; if(p-NULL return 0; p→>data=e; p→>next=*top; *top-pi
栈之链式栈(cont’d) 3、链式栈:用链表实现的栈 (3) 链式栈的基本操作(入栈): int push(LKSTACK *top, elemtype e) { NODEPTR p; p=(NODEPTR)malloc(LEN); if(p==NULL) return 0; p→data=e; p→next=*top; *top=p; } • 入栈
之链式c( 3、链式栈:用链表实现的栈 (4)链式线的基本操作出线: 出栈 int pop(lKstacK*top, elemtype *e) &NODEPTR p if( top==NULL) return 0; e=(top)→data; * top; top=(*top)→>next; freely );
栈之链式栈(cont’d) 3、链式栈:用链表实现的栈 (4) 链式栈的基本操作(出栈): int pop(LKSTACK *top, elemtype *e) { NODEPTR p; if(*top==NULL) return 0; *e=(*top)→data; p=*top; *top=(*top)→next; free(p); } • 出栈
传之线的应用 4、的应用范例数调用 (1)函数的调用和返回 系统调用函数时,为了能 够正确返回,必须将返回地 址先入栈,此外,非静态的 局部变量也占用栈的空间 当函数返回时,这些数据将 出栈。这也就是局部变量生 存期短的原因
栈之栈的应用 4、栈的应用范例(函数调用) (1) 函数的调用和返回 系统调用函数时,为了能 够正确返回,必须将返回地 址先入栈,此外,非静态的 局部变量也占用栈的空间, 当函数返回时,这些数据将 出栈。这也就是局部变量生 存期短的原因
传之战的应用(c 4、的应用范例表达式 (2) 这式求值(算符优先法) 基本知识: o表达式由运算符、操作数和界限符构成,它们 被称为“单词” 操作数可以是常量或者变量 6运算符区分左右结合性,同优先级运算符连用 时的优先顺序受结合性约束 界限符包括圆括号和算式结束符 当外部运算符是分号并5-2; 且运算符栈只有一个(并且 操作数栈只有个元素时 (240 表达式为正确表达式 240 运算符栈操作数栈
栈之栈的应用(cont’d) 4、栈的应用范例(表达式) (2) 算术表达式求值(算符优先法) 基本知识: 表达式由运算符、操作数和界限符构成,它们 被称为“单词” 操作数可以是常量或者变量 运算符区分左右结合性,同优先级运算符连用 时的优先顺序受结合性约束 界限符包括圆括号和算式结束符 运算符栈 操作数栈 【例】计算:2+3*2^2^2*5-2; ( 2 + 3 * 2 ^ 2 ^ 2 2^2=4 4 2^4=16 16 3*16=48 48 * 5 48*5=240 240 240+2=242 242 - 2 242-2=240 240