赞
踩
文章目录
题目练习
1.顺序栈入栈、出栈操作
要求
代码
2.进制转换(10进制转换为r进制)
要求
代码
3.括号匹配
要求
代码
4.回文判断
要求
代码
5.
要求
代码
题目练习
1.顺序栈入栈、出栈操作
要求
编写顺序栈的入栈、出栈的操作函数。
代码
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 ************/
}
2.进制转换(10进制转换为r进制)
要求
利用栈基本操作,编写一个能将一个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 **********/
}
3.括号匹配
要求
编写一个能调用栈基本操作实现括号匹配的函数。
代码
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 **********/
}
4.回文判断
要求
编写一个能调用栈基本操作实现回文判断的函数。
代码
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 **********/
}
5.
要求
输入一个整数序列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 版权所有,并保留所有权利。