顺序栈和顺序队列

来源:互联网 发布:福州 数据分析 培训 编辑:程序博客网 时间:2024/05/02 10:18

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
原创粉丝点击