1.十进制转换八进制
void Conversion(SqStack S){
InitStack(S);
int N = 0;
scanf("%d", &N);
while(N){
Push(S, N%8);
N = N/8;
}
while(!StackEmpty(S)){
int e;
Pop(S, e);
printf("%d", e);
}
}
2.括号匹配算法
bool MatchBracket(SqStack S, char str[]){
InitStack(S);
bool flag = false;
int i = 0;
char ch;
while(str[i] != '\0'){
if(str[i] == '(' || str[i] == '['){
Push(S, str[i]);
}
if(str[i] == ')'){
GetTop(S, ch);
if(ch == '('){
Pop(S, ch);
flag = true;
}else{
flag = false;
return flag;
}
}
if(str[i] == ']'){
GetTop(S, ch);
if(ch == '['){
Pop(S, ch);
flag = true;
}else{
flag = false;
return flag;
}
}
i++;
}
if(!StackEmpty(S)) flag = false;
return flag;
}
测试
int main(){
SqStack S;
char str[] = "((([])))";
bool b = MatchBracket(S, str);
b ? printf("匹配\n"):printf("不匹配\n");
return 0;
}
输出:
匹配
3.行编辑程序
void LineEdit(SqStack S){
/*
* # 表示退一格
* @ 表示退一行
*/
InitStack(S);
char ch = getchar();
while(ch != EOF){
while(ch != EOF && ch!='\n'){
switch(ch){
case '#' : Pop(S, ch); break;
case '@' : ClearStack(S); break;
default : Push(S, ch); break;
}
ch = getchar();
}
if(ch != EOF) ch = getchar();
}
/*打印结果*/
SqStack PrintStack;
InitStack(PrintStack);
while(!StackEmpty(S)){
Pop(S, ch);
Push(PrintStack, ch);
}
while(!StackEmpty(PrintStack)){
Pop(PrintStack, ch);
printf("%c", ch);
}
DestroyStack(S);
DestroyStack(PrintStack);
}
测试:
注:Windows下ctrl + z 为EOF键入