栈和队列

栈的性质与特点

栈的主要特点是先进后出。
按照存储结构可分为两种:顺序栈和链式栈。

##顺序栈的定义

typedef struct{
int data[maxSize];
int top;
}sqstack;
##链式栈的定义

typedef struct LNode{
int data;
struct LNode *next;
}LNode;

顺序栈的要素

(1)栈空状态。
st.top==-1;
(2)栈满状态。
st.top==Maxsize-1;

栈的相关操作

(1)进栈操作。
指针必须是先变化操作,再移入数据元素。
++(st.top); st.data[st.top]=x;

(2)出栈操作:
必须先移除元素,再变动指针
x=st.data[st.top]; --(st.top);

栈的初始化的代码

void initStack(sqstack &st){
	st.top==-1;	//只需将栈顶指针设置为-1;

}

栈的判断空代码

void Isempt(Sqstack sq){
if(st.top==-1){
retrun 1;
}
else{
return 0;
}

}

进栈代码

bool push(Sqstack &S,int x){
if(st.top==MaxSize-1)
return false;
S.data[++S.top]=x;
return true;

}

出栈代码

bool pop(Sqstack &S,int x){
if(st.top==-1)
return false;
x=S.data[–S.top];
return true;

}

队列

1队列的顺序存储

对空条件 Q.front=Q.rear=0;
入队操作:指针不满时,先送入队尾元素,再将队尾指针加一。
出队操作:指针不空,先取对头元素,**再将队头指针加一 **。

2循环队列

对空条件:Q.front=Q.rear;
队满条件:(Q.rear+1)%MaxSize=Q.front;

3循环队列操作

a.初始化
void InitQueue(SqQueue &Q){
Q.front =Q.rear=0;
}
b.判断空
	bool IsEmpty(SeQueue &Q){
if(Q.front ==Q.rear)
 return true;
else return false;

}
c.入队

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;

}

d.出队

bool DeQueue(SqQueue &Q, ElemType &x){
if((Q.rear==Q.front)
return false;
x=Q.data[Q.front];
Q.rear=(Q.rear+1)%MaxSize;
return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值