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;
}