• 《数据结构》_3栈和队列


    堆栈

    堆栈是限定插入和删除操作都在表的同一端进行的线性表。 特点为LIFO(后进先出)

    堆栈的顺序表示.c

    #include<stdio.h>
    typedef struct//堆栈结构体定义
    {
        int top;//当前栈顶位置的下标
        int maxSize;;//maxSize-1是堆栈最大位置的下标
        ElemType *element;//自定义类型,可根据实际情况设定int、float等等
    }
    void Create(Stack *S,int mSize)//创建一个能容纳mSize个单元的空堆栈
    {
        S->maxSize=mSize-1;
        S->element=(ElemType*)malloc(sizeof(ElemType)*mSize);
        s->top=-1;
    }
    void Destroy(Stack *S)//销毁已存在的堆栈,释放数组空间
    {
        S->maxSize=-1;
        free(S->element);
        S->top=-1;
    }
    BOOL IsEmpty(Stack
    *S)//空就返回TRUE,否则FALSE { return S->top==-1; }
    BOOL IsFull(Stack
    *s) { return S->top==S->maxSize; }
    BOOL Top(Stack
    *S,ElemType *x)//获得栈顶元素 { if(IsEmpty(S)) return FALSE; x=S->element[S->top]; return TURE; }
    BOOL Push(Stack
    *S,ElemType x)//在栈顶插入元素(入栈) { if(IsFull(S)) return FALSE; S->top++; S->element[S->top]=x; return TURE; }
    BOOL Pop(Stack
    *S)//删除栈顶元素(出栈) { if(IsEmpty(S))return FALSE; S->top--;return TRUE; } void Clear(Stack *S)//清除全部的元素,但并不释放空间 { S->top=-1; } void main(){ printf("我不知道输些什么哈···"); }

    队列

    队列是限定在表的一端插入,在另一端输出的线性表。FIFO(先进先出)

    在队列的使用中,设定了循环队列,以防止假“溢出”现象。但是循环队列永远要保持至少一个空位。

    队列的顺序表示.c

    #include<stdio.h>
    typedef struct
    {
        int front;
        int rear;
        int maxSize;
        ElemType *element;
    }Queue;
    
    void create(Queue *Q,int mSize)
    {
        Q->maxSize=mSize;
        Q->element=(Element*)malloc(sizeof(ElemType)*mSize;
        Q->front=Q->rear=0;
    }
    
    void Destroy(Queue *Q)
    {
        Q->maxSize=-1;
        free(Q->element);
        Q->front=Q->rear=-1;
    }
    
    BOOL IsEmpty(Queue *Q)
    {
        return Q->front=Q->rear;//判断队列为空的条件front=rear
    }
    
    BOOL IsFULL(Queue *Q)
    {
        return Q->front==(Q->rear+1)%Q->maxSize;
    }
    
    BOOL Front(Queue *Q,ElemType *x)//获取队头元素,并通过x返回。操作成功就返回TURE,否则返回FALSE
    {
        if(IsEmpty(Q)) return FALSE;//空队列处理
        x=Q->element[(Q->front+1)%Q->maxSize];
        return TRUE;
    }
    
    BOOL EnQueue(Queue *Q,ElemType *x)//在队列Q的队尾插入元素x(入队),操作成功则返回TURE,否则FALSE
    {
        if(IsFULL(Q)) return FALSE;//溢出处理
        Q->rear=(Q->rear+1)%Q->maxSize;
        Q->element[Q->rear]=x;
        return TRUE;
    }
    
    BOOL DeQueue(Q)//删除头元素(出队)
    {
        if(ISEmpty(Q)) return FALSE;
        Q->front=(Q->front+1)%Q->maxSize;
        return TURE;
    }
    
    void Clear(Queue *Q)//清空队列元素,但并不释放空间
    {
        Q->front=Q->rear=0;
    }

    表达式计算

    重点为中缀表达式和后缀表达式的相互转化。

    代码和原理可以参考:https://blog.csdn.net/huangchijun11/article/details/60963444

    在这里做两个题

    • (a+b)/(c+d)    ->               ab+cd+/
    • a*c-b/c^2       ->               ac*bcc*/-
    • a*b/c              ->               ab*c/
    • a+(b*c+d)/e  ->                abc*d+e/+
    • a/(b-c)+d*e    ->               abc-/de*+
    • a*((b+c)/(d-e)-f)  ->         abc+de-/f-*
    • (a+b)*(c*d+e)-a*c   ->    ab+cd*e+*ac*-
  • 相关阅读:
    125-PHP类__set()魔术方法
    124-PHP类析构函数
    123-PHP类构造函数
    122-PHP类成员函数(三)
    121-PHP类成员函数(二)
    120-PHP调用成员方法并将不同类的对象做为参数
    119-PHP调用private成员的方法
    118-PHP调用带参数的成员方法
    117-PHP在外部无法调用private类成员函数
    HDU-2045 不容易系列之(3)—— LELE的RPG难题 找规律&递推
  • 原文地址:https://www.cnblogs.com/WittPeng/p/9125747.html
Copyright © 2020-2023  润新知