顺序栈和顺序队列

1.栈的定义:

栈是限定在表尾进行插入和删除操作的线性表;

把允许插入和删除的一端称为栈顶(top), 
另一端称为栈底(bottom), 不含任何数据元素的栈称为空栈。

栈又称为后进先出的线性表。

栈的插入操作,叫做进栈,也称为压栈,入栈。子弹入弹夹;

栈的删除操作,叫做出栈,也有的叫做弹栈。

(1)顺序栈的进栈操作:

/*插入元素e为新的栈顶元素*/ 

Status Push(SqStack *S, SElemType e)
{
if(S->top == MAXSIZE -1)    /栈满**/ 
{
return 0;
}
s->top++;                            /*栈顶指针增加一*/ 
s->data[s->top] = e;                    /*将新插入元素赋值给栈顶空间*/ 
return 1;

}

(2)顺序栈的出栈操作:

/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK; 否则返回ERROR*/ 

Status Pop(SqStack *S, SElemType *e)
{
if(s->top == -1)
return 0;
*e = s->data[s->top];          /*将要删除的栈顶元素赋值给e*/
s->top--;                     /*栈顶指针减一*/
return 1;

}

2.队列的定义:

队列是一种特殊的线性表。

队列仅在线性表的两端进行操作。

 队头(Front):取出数据元素的一端。

 队尾(Rear):插入数据元素的一端。

队列不允许在中间部位进行操作!

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

队列是一种先进先出的线性表。

允许插入的一端称为队尾,允许删除的一端称为队头。

(1)顺序队的入队操作:

/* 若队列未满,则插入元素e为Q新的队尾元素 */

Status EnQueue(SqQueue *Q,QElemType e)
{
if ((Q->rear+1)%MAXSIZE == Q->front)           /* 队列满的判断 */
return 0;
Q->data[Q->rear]=e;                  /* 将元素e赋值给队尾 */
Q->rear=(Q->rear+1)%MAXSIZE;                  /* rear指针向后移一位置, */
               /* 若到最后则转到数组头部 */
return  1;
}

(2)顺序队的出队操作:

/* 若队列不空,则删除Q中队头元素,用e返回其值 */

Status DeQueue(SqQueue *Q,QElemType *e)
{
if (Q->front == Q->rear)         /* 队列空的判断 */
return 0;
*e=Q->data[Q->front]; /* 将队头元素赋值给e */
Q->front=(Q->front+1)%MAXSIZE;         /* front指针向后移一位置, */
/* 若到最后则转到数组头部 */
return  1;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值