赞
踩
编写顺序栈的入栈、出栈的操作函数。
Status Push(SqStack &S, SElemType e){
// 若栈非空,将元素e入栈,函数返回OK,否则返回ERROR
/********** Begin **********/
if (S.top - S.base == S.stacksize) return ERROR;
*S.top++ = e;
return OK;
/********** End **********/
}
Status Pop(SqStack &S,SElemType &e){
//如果栈为空,出栈失败,函数返回ERROR,否则删除栈顶元素通过e,函数返回OK
//条件:
/********** Begin **********/
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
/********** End ************/
}
利用栈基本操作,编写一个能将一个10进制转换成r进制(2、8、16)的函数。
Status Convert(SqStack &S,int N,int r){ //十进制N转换成r(2、8、16)进制,十六进制以大写字母形式输出 /********** Begin **********/ InitStack(S); while (N) { Push(S, N % r); N = N / r; } int e; while (!StackEmpty(S)) { Pop(S, e); if (e < 10) printf("%d", e); else printf("%c", 'A' + e - 10); } /********** End **********/ }
编写一个能调用栈基本操作实现括号匹配的函数。
Status Compare(SqStack &S,char Str[]){ /*括号匹配(考虑三类括号:'([{'),对输入的括号字符串Str[]进行检测*/ /********** Begin **********/ InitStack(S); int i = 0; SElemType e; bool flag = true; while (Str[i] != '\0' && flag) { switch(Str[i]) { case '(': //Push(S, Str[i]); break; case '[': //Push(S, Str[i]); break; case '{': Push(S, Str[i]); break; case ')': if(Pop(S, e) == ERROR || e != '(') flag = false; break; case ']': if(Pop(S, e) == ERROR || e != '[') flag = false; break; case '}': if(Pop(S, e) == ERROR || e != '{') flag = false; break; } i++; } if (flag && StackEmpty(S)) return true; return false; /********** End **********/ }
编写一个能调用栈基本操作实现回文判断的函数。
Status Judge(SqStack &S,char str[]){ /*回文判断,对输入的字符串Str[]进行检测*/ /********** Begin **********/ InitStack(S); int i = 0; SElemType e; int flag = 1; int n = strlen(str) / 2; for (i = 0; i < n; i++) { Push(S, str[i]); } if (strlen(str) % 2 != 0) { i++; } while (str[i] != '\0' && flag) { Pop(S, e); if (e != str[i]) flag = 0; i++; } if (flag) return OK; return ERROR; /********** End **********/ }
输入一个整数序列a1,a2,a3…,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。
void InOutS(SqStack &S,SElemType a[],int n) {//实现一组整数序列a[]的出入栈,当a[i]为-1时出栈,其余入栈 /********** Begin **********/ int i; SElemType e; for (i = 0; i < n; i++) { if (a[i] != -1) Push(S, a[i]); else { if (Pop(S, e)) { cout << e << endl; } else { cout << "POP ERROR" << endl; return; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。