知识点:
栈:
只允许在一端进行插入或删除操作的线性表,先进后出LIFO
类似一摞书,按顺序拿,先放的书只能最后拿;
顺序栈:栈的顺序存储
cpp
typedef struct{
Elemtype data[50];
int top;
}SqStack;
SqStack S;
基本操作:(使用数组实现栈--》顺序栈)
cpp
#define MaxSize 50
typedef int ElemType;
//顺序栈
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack &S){
S.top=-1;
}
//判空
bool StackEmpty(SqStack &S){
if(S.top==-1)
return true;
return false;
}
//入栈
bool Push(SqStack &S,ElemType x){
if(S.top==MaxSize-1) return false;//栈满
S.data[++S.top]=x;
//S.top++;
//S.data[S.top]=x;
return true;
}
//出栈
bool Pop(SqStack &S,ElemType &x){
if(-1==S.top)//栈空
return false;
x=S.data[S.top--];//后减减,x=S.data[S.top];S.top=S.top-1;
return true;
}
//读取栈顶元素
bool GetTop(SqStack &S,ElemType &x){
if(-1==S.top)//说明栈为空
return false;
x=S.data[S.top];
return true;
}
int main(){
SqStack S;
bool flag;
ElemType m;
InitStack(S);
flag=StackEmpty(S);
if(flag){
printf("kong");
}
Push(S,3);
Push(S,4);
flag=GetTop(S,m);
if(flag) printf("s[top]==%d",m);
flag=Pop(S,m);
if(flag) printf("s[top]==%d",m);
return 0;
}
队列(Queue)
简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向
队列中插入元素称为入队或进队;删除元素称为出队或离队
先进先出 FIFO,其实就是排队打饭的队伍
队头( Front ):允许删除的一端,又称队首。
队尾( Rear ):允许插入的一端。
队列中主要学习循环队列:
循环队列
cpp
(Q.rear+1)%MaxSize==Q.front//队满
Q.rear==Q.front //队空
cpp
//循环队列
#define MaxSize 5;
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];//最多存储max-1个,数组从0开始
int front,rear;
}SqQueue;
void InitQueue(SqQueue &Q){
Q.rear=Q.front=0;
}
//判空
bool isEmpty(SqQueue &Q){
if(Q.rear==Q.front)//不需要为零
return true;
return false;
}
//入队 尾巴在向后移动
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;
}
//出队 头在向后移动
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear==Q.front)
return false;
x=Q.data[Q.front];//先进先出
Q.front=(Q.front+1)%MaxSize;
return true;
}