今天学习了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; }
标签:2023.09,return,22,top,bool,front,true,rear From: https://www.cnblogs.com/dmx-03/p/17723177.html