入栈Status Push(SqStack &S, SElemType e)Ⅱ栈已满,震需重新申请空(if (S.top-S.base>=S.stacksize)间( S.base=(ElemType *) realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)if(!S.base) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT1*S.top=e;S.top++;return OK;6
6 入栈 Status Push(SqStack &S, SElemType e) { if (S.top-S.base>=S.stacksize) //栈已满,需重新申请空 间 { S.base=(ElemType *) realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top=e; S.top++; return OK; }
出栈Status Pop(SqStack &S, SElemType &e);1空栈( if(S.top= =S.base) return ERROR;e=*.-S.top;return OK;^
7 出栈 Status Pop(SqStack &S, SElemType &e) { if(S.top= =S.base) return ERROR; //空栈 e=*-S.top; return OK; }
3.2栈的应用举例3.2.1数制转换将十进制数N转换为d进制的数N=(N divd)*d + N modd以N=3467,d=8为例转换方法如下:NN/8(整除)N%8(求余)34333467低位5414335466066高位所以: (3467)10o =(6613):余数符合后进先出的规律8
8 3.2 栈的应用举例 3.2.1 数制转换 将十进制数N转换为d进制的数 N=(N div d)*d+ N mod d 以N=3467,d=8为例转换方法如下: N N / 8(整除) N % 8(求余) 3467 433 3 低位 433 54 1 54 6 6 6 0 6 高位 所以:(3467) 10 =(6613) 8 余数符合后进先出的规律
十进制数转换成八进制数/任何非负值的十进制数转换成八进制数void conversionoinitstack(S);scanf("%d",N);while (N)//余数入栈 Push (S N %8):N=N / 8;1while (!StackEmpty(S)) Pop(S,e);printf(“ %d ",e) ;C9
9 void conversion() //任何非负值的十进制数转换成八进制数 { initstack(S); scanf(“%d”,N); while ( N ) { Push ( S,N %8 ); //余数入栈 N=N / 8; } while ( !StackEmpty ( S ) ) { Pop (S ,e ); printf ( “ %d ”,e ) ; } } 十进制数转换成八进制数
行编辑程序Void lineedit()Ⅱ缓冲区(用栈结构)存放一行字符,逐行存入用户数据区( initstack(S); ch=getchar();Ⅱ文件结束吗?while(ch!=EOF){ while(ch!=EOF&& ch!='ln'){ switch(ch)I/退格符{ case ‘#": Pop(S,c);Ⅱ退行符case‘@': ClearStack(S);Ⅱ其它字符则入栈default: Push(S,ch);1ch=getchar();人将栈内字符传送到用户数据区clearstack(s);if(ch!=EOF)ch=getchar()1DestroyStack(S);710
10 行编辑程序 Void lineedit() //缓冲区(用栈结构)存放一行字符,逐行存入用户数据 区 { initstack(S); ch=getchar(); while(ch!=EOF) //文件结束吗? { while(ch!=EOF && ch!=‘\n’) { switch(ch) { case ‘#’: Pop(S,c); //退格符 case ‘@’: ClearStack(S); //退行符 default: Push(S,ch); //其它字符则入栈 } ch=getchar(); } 将栈内字符传送到用户数据区; clearstack(s); if (ch!=EOF) ch=getchar(); } DestroyStack(S); }