栈的性质与特点
栈的主要特点是先进后出。
按照存储结构可分为两种:顺序栈和链式栈。
##顺序栈的定义
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;
}