云舒云卷吧 关注:6贴子:166
  • 1回复贴,共1


IP属地:广西1楼2015-05-12 12:45回复
    #include<stdlib.h>
    #include<iostream.h>
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    #define MAXSIZE 100
    typedef int Status;
    typedef int SElemType;
    typedef int QElemType;
    typedef char SElemTypes;
    typedef char QElemTypes;
    typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
    }SqStack;
    typedef struct{
    SElemTypes *base;
    SElemTypes *top;
    int stacksize;
    }SqStacks;
    //队列
    #define MAXQSIZE 100
    typedef struct{
    QElemType *base;
    int front;
    int rear;
    }SqQueue;
    typedef struct{
    QElemTypes *base;
    int front;
    int rear;
    }SqQueues;
    //栈
    Status InitStack(SqStack &S){
    S.base = new SElemType[MAXSIZE];
    if(!S.base)
    exit (OVERFLOW);
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
    }
    //入栈
    Status Push(SqStack &S,SElemType e){
    if(S.top-S.base==S.stacksize)
    return ERROR;
    *(S.top++) = e;
    return OK;
    }
    //出栈
    Status Pop(SqStack &S,SElemType &e){
    if(S.base == S.top)
    return ERROR;
    e = *(--S.top);
    return OK;
    }
    //=========
    //栈
    Status InitStack(SqStacks &S){
    S.base = new SElemTypes[MAXSIZE];
    if(!S.base)
    exit (OVERFLOW);
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
    }
    //入栈
    Status Push(SqStacks &S,SElemTypes e){
    if(S.top-S.base==S.stacksize)
    return ERROR;
    *(S.top++) = e;
    return OK;
    }
    //出栈
    Status Pop(SqStacks &S,SElemTypes &e){
    if(S.base == S.top)
    return ERROR;
    e = *(--S.top);
    return OK;
    }
    //=======
    //队列
    Status InitQueue (SqQueue &Q){
    Q.base =new QElemType[MAXQSIZE] ;
    if(!Q.base) exit(OVERFLOW);
    Q.front=Q.rear=0;
    return OK;
    }
    //入队
    Status EnQueue(SqQueue &Q,QElemType e){
    if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
    Q.base[Q.rear]=e;
    Q.rear=(Q.rear+1)%MAXQSIZE;
    return OK;
    }
    //出队
    Status DeQueue(SqQueue &Q,QElemType &e){
    if(Q.front==Q.rear) return ERROR;
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;
    return OK;
    }
    //========
    //队列
    Status InitQueue (SqQueues &Q){
    Q.base =new QElemTypes[MAXQSIZE] ;
    if(!Q.base) exit(OVERFLOW);
    Q.front=Q.rear=0;
    return OK;
    }
    //入队
    Status EnQueue(SqQueues &Q,QElemTypes e){
    if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
    Q.base[Q.rear]=e;
    Q.rear=(Q.rear+1)%MAXQSIZE;
    return OK;
    }
    //出队
    Status DeQueue(SqQueues &Q,QElemTypes &e){
    if(Q.front==Q.rear) return ERROR;
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;
    return OK;
    }
    //========
    //队列测试
    void PushPop(SqQueue &Q){
    int n=5,i;QElemType e;
    cout<<"队列输入"<<n<<"个数:"<<endl;
    for(i=0;i<n;i++){
    cin>>e;
    EnQueue(Q,e);
    }
    cout<<"队列输出:"<<endl;
    for(i=0;i<n;i++){
    DeQueue(Q,e);
    cout<<e<<" ";
    }
    cout<<endl;
    }
    //回文
    void HuiWen(){
    int i=0,flag=0;
    char c,n,m;
    SqStacks S;
    SqQueues Q;
    InitStack(S);
    InitQueue(Q);
    cout<<"输入一串字符以 # 结束:"<<endl;
    cin>>c;
    while(c!='#'){
    Push(S,c);
    EnQueue(Q,c);
    cin>>c;
    }
    while(S.base!=S.top){
    Pop(S,n);DeQueue(Q,m);
    if(n==m) flag=1;
    }
    if(flag) cout<<"该字符串是回文"<<endl;
    else cout<<"该字符串不是回文"<<endl;
    }
    //N!
    int N(int n){
    if(n==0) return 1;
    else return n*N(n-1);
    }
    //N!栈
    void N(){
    SqStack S;
    int n,i,m,sum=1;
    InitStack(S);
    cout<<"输入N=";
    cin>>n;
    m=n;
    for(i=0;i<m;i++){
    Push(S,n);
    n=n-1;
    if(n==0){
    n=1;
    }
    }
    for(i=0;i<m;i++){
    Pop(S,n);
    cout<<n<<" ";
    sum=sum*n;
    }
    cout<<endl<<"N!="<<sum<<endl;
    }
    void main(){
    SqQueue Q;
    InitQueue(Q);
    PushPop(Q);
    HuiWen();
    cout<<"输入阶层n=";
    int n;
    cin>>n;
    cout<<N(n)<<endl;
    N();
    }


    IP属地:广西2楼2015-05-12 12:46
    回复