栈——进制的转换 #include <iostream.h> #include <malloc.h> #include <stdlib.h> typedef struct{ int * base; int *top; int stacksize; }Stack; int InitStack(Stack &S) { S. base = ( int *) malloc(STACK_INIT_SIZE* sizeof( int)); if (!S. base) exit(OVERFLOW); S.top = S. base; S.stacksize = STACK_INIT_SIZE; return 1; } int Push(Stack &S, int e ) { if (S.top-S. base >= S.stacksize) { S. base = ( int *) realloc(S. base, (S.stacksize + T) * sizeof( int)); if (!S. base) exit(OVERFLOW); S.top = S. base + S.stacksize; S.stacksize += T; } *S.top++ = e; return 1; } int Pop(Stack &S, int &e) { if (S.top == S. base) return 0; e = *--S.top; return 1; } int StackEmpty(Stack S) { if (S.top == S. base) return 1; else return 0; } void conversion( int N, int r) { Stack S; int e; InitStack(S); while(N) { Push(S, N%r); N = N/r; } } while(!StackEmpty(S)){ Pop(S, e); cout << e; } void main() { int N, r; cin >> N; cin >> r; cout << N << " 由十进制转换为 " << r << " 进制后的值为: "; conversion(N, r); cout << endl; }
括号匹配检验
#include<iostream.h> #include<string.h> typedef struct node{ elemtype data; struct node *next; }stack; stack *top;void push(elemtype n){ stack *p; p=new stack; p->data=n; p->next=top->next; top->next=p; }void pop(){ stack *q; q=top->next; top->next=top->next->next; delete q; } elemtype gettop(){ return top->next->data; }void judge(char a[]){ int i,tag=0,len=strlen(a);//tag==1 for(i=0;i<len;i++) if(a[i]=='('||a[i]=='['||a[i]=='{ ') {push(a[i]);continue;} if(top->next==NULL) { cout<<"No"<<endl; break; tag=1; } if(a[i]!=')'&&a[i]!=']'&&a[i]!='}') continue; if(a[i]-gettop()==1||a[i]-gettop()==2) pop(); else { cout<<"No"<<endl; break; tag=1; } } if(tag==0&&i==len) { if(top->next==NULL) cout<<"Yes"<<endl; else cout<<"No"<<endl; } top->next=NULL; }int main() { top=new stack; top->next=NULL; char a[100]; int n; cin>>n; while(n--){ cin>>a; judge(a); } return 0;