2023.09.22

发布时间 2023-09-22 19:02:11作者: new菜鸟

今天学习了javaweb的入门安装,以及进行了数据结构的学习

栈是只允许在一端进行插入和删除操作的线性表,操作特性可以明显的概括为后进先出
n个不同元素进栈,出栈元素不同排列的个数为C(n:2n)/n+1,即卡特兰数
栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式
采用顺序存储的栈称为顺序栈;栈空:S.top==-1;栈满:S.top==MaxSize-1;栈长:S.top+1
由于顺序栈的入栈操作受数组上界的约束,有可能发生栈上溢
下面是顺序栈上常用的基本运算的实现

下面是顺序栈上常用的基本运算的实现
1.初始化
    void InitStack(SqStack &S){
        S.top=-1;
    }
2.栈判空
    bool StackEmpty(SqStack S){
        if(S.top==-1)    return true;
        else    return false;
    }
3.进栈
    bool Push(SqStack &S,ElemType x){
        if(S.top==MaxSize-1)    return false;
        S.data[++S.top]=x;    return true;
    }
4.出栈
    bool Pop(SqStack &S,ElemType &x){
        if(S.top==1)    return false;
        x=S.data[S.top--];
        return true;
    }
5.读栈顶元素
    bool GetTop(SqStack S,ElemType &x){
        if(S.top==-1)    return false;
        x=S.data[S.top];
        return true;
    }

利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸
采用连式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况,通常采用单链表实现
栈和队列具有相同的逻辑结构,他们都属于线性表,但是运算不同
队列简称队,也是一种操作受限的线性表,队尾插入队头删除,操作特性为先进先出
队列的顺序存储,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置
循环队列队空:Q.front==Q.rear ; 队满(Q.rear+1)%MaxSize == Q.front;
循环队列的操作

循环队列的操作
1.初始化
    void InitQueue(SqQueue &Q){
        Q.rear=Q.front=0;
    }
2.判队空
    bool isEmpty(SqQueue &Q){
        if(Q.rear==Q.front) return true;
        else    return false;
    }
3.入队
    bool EnQueue(SqQueue &Q,ElemType x){
        if((Q.rear+1)%MaxSize==Q.front) return false;
        Q.data[Q.rear]=x;
        Q.rear=(Q.rear+1)%MaxSize;
        return true;
    }
4.出队
    bool DeQueue(SqQueue &Q,ElemType &x){
        if(Q.rear==Q.front)    return fasle;
        x=Q.data[Q.front];
        Q.front=(Q.front+1)%MaxSize;
        return true;
    }