zoukankan      html  css  js  c++  java
  • 《栈和队列》实验四 (无行号)

    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    #define INIT_SIZE_STACK 100
    #define STACKINCREMENT 10
    typedef int Status;
    typedef char ElemType;
     
    typedef struct
    {
        ElemType *top;
        ElemType *base;
        int stacksize;
     }SqStack;
    
    //构造一个空栈
    Status InitStack(SqStack &S)
    {
        S.base = (ElemType *)malloc(INIT_SIZE_STACK*sizeof(ElemType));
        if(!S.base)    exit(OVERFLOW);
        S.top = S.base;        //栈空的标志
        S.stacksize = INIT_SIZE_STACK;
        return OK;
    }
    
    //入栈
    Status Push(SqStack &S,ElemType e)
    {//插入为新的栈顶元素
        if(S.top - S.base >= S.stacksize)
        {//栈满,追加空间
            S.base = (ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
            if(!S.base)    exit(OVERFLOW);
            S.top = S.base+S.stacksize;
            S.stacksize +=STACKINCREMENT;
        }
        //*S.top = e;
        //S.top++;
        *(S.top++) = e;
        printf("s.[%d]=%c
    ",S.top-S.base-1,e);
        return OK;
    }
    
    //删除栈顶元素
    Status Pop(SqStack &S,ElemType &e)
    {
        if(S.top == S.base)        return ERROR;
        //S.top--;
        //e = *S.top;
        e+*(--S.top);
        return OK;
    }
    
    //判断栈是否为空
    int StackEmpty(SqStack S)
    {
        if(S.top == S.base)
            return 1;
        else 
            return 0;
    }
    
    //得到栈顶元素
    Status GetTop(SqStack S)
    {
        ElemType e;
        if(S.top == S.base)        return ERROR;
        e = *(S.top-1);
        return e;
    }
    
    #define QueueSize 100
    //循环队列的存储结构
    typedef struct
    {
        ElemType *base;
        int front,rear;
    }SeqQueue;
    
    //构造一个循环队列
    Status InitQueue(SeqQueue &Q)
    {
        Q.base = (ElemType *)malloc(QueueSize*sizeof(ElemType));
        if(!Q.base)
                exit(OVERFLOW);
            Q.front = Q.rear = 0;
            return OK;
    }
    
    //插入为新的队尾元素
    Status EnQueue(SeqQueue &Q,ElemType e)
    {
        if((Q.rear+1)%QueueSize==Q.front)
        {
            printf("Queue overflow");
            return ERROR;
        }
        Q.base[Q.rear] = e;
        Q.rear = (Q.rear+1)%QueueSize;
        return OK;
    }
    
    //删除队头元素
    Status DeQueue(SeqQueue &Q,ElemType &e)
    {
        if(Q.front == Q.rear)
        {
            printf("Queue empty");
            return ERROR;
        }
        e = Q.base[Q.front];
        Q.front = (Q.front+1)%QueueSize;
        return OK;
    }
    
    //得到队头元素
    ElemType GetHead(SeqQueue Q)
    {
        if(Q.front == Q.rear)
        {
            printf("Queue enpty");
            exit(ERROR);
        }
        else
            return Q.base[Q.front];
    }
    
    //遍历循环队列
    Status QueueTraverse(SeqQueue Q)
    {
        int p;
        if(Q.front == Q.rear)
        {
            printf("Queue empty");
            return ERROR;
        }
        p = Q.front;
        do
        {
            printf("%2c",Q.base[p]);
            p = (p+1)%QueueSize;
        }while(p!=Q.rear);
        return OK;
    }
    
    void main()
    {
        SqStack s;
        SeqQueue q;
        ElemType ch,e1,e2;
        int state;
        InitStack(s); InitQueue(q);
        printf("input a string endding by#:");
        scanf("%c",&ch);
        while(ch!='#')
        {
            Push(s,ch);
            EnQueue(q,ch);
            scanf("%c",&ch);
        }
        printf("
    The Queue is;");
        QueueTraverse(q);
        printf("
    ");
        state = TRUE;
        while(!StackEmpty(s) && state)
        {
            if(GetTop(s)==GetHead(q))
            {
                Pop(s,e1);
                DeQueue(q,e2);
            }
            else
                state = FALSE;
        }
        if(state)
            printf("This string is HuiWen!
    ");
        else
            printf("The string is not HuiWen!
    ");
    }

  • 相关阅读:
    Mysql删除数据库中所有表
    MySQL出现2059错误
    .NetCore笔记
    PLSql中文乱码
    Oracle误删除数据恢复。Oracle删除后恢复数据
    ora-28000:the account is locked,Oracle修改密码有效期,Oracle设置密码不过期
    Linux 常用命令
    Razor
    ORA-01578: ORACLE 数据块损坏 (文件号 13, 块号 2415081) ORA-01110: 数据文件XXXXXX
    ORA-01033:ORACLE initialization or shutdown
  • 原文地址:https://www.cnblogs.com/sun-/p/4919299.html
Copyright © 2011-2022 走看看