栈与队列(栈)
1.定义
相同点:栈和队列都是线性表。
不同点:栈是限定仅在表尾进行插入和删除操作的线性表。(先进后出)
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。(后进后出)
栈:
我们把允许插入和输出的那一称之为栈顶(top),另一端称为栈底(bottom)。不含任何元素的栈称为空栈。
栈的插入工作称为进栈,也称压栈、入栈。
栈的删除工作称为出栈,也称为弹栈。
队列:
我们把允许插入的一端称为队头,允许删除的一端称为队尾。
队的插入工作称为入队。
队的删除工作称为出队。
2.栈
栈的顺序结构及其实现
我们定义一个top变量来表示栈顶元素在数组中的位置,若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize,当栈中存在一个元素,top=0,因此把空战的限定条件定为top=-1;
实现进栈出栈
int push(int *stack,int max,int *top,int x)
{
if(*top>=max)
return 1;//栈满
stack[*top]=x;//第一步操作,保证元素在0位置处
(*top)++;
return 0;
}
int pop(int *stack,int *top,int *t)
{
if(*top==0) //空栈
return 1;
(*top)--;
*t=stack[*top];
return 0;
}
栈的链式结构及其实现
void Push(int *&s,int e)//进栈
{
LiStack *p=new LiStack;
p->data=e;
p->next=s->next;
s->next=p;
}
int Pop(int *&s,int &e)//出栈
{
LiStack *p;
if(s->next==NULL)
return 0;
p=s->next;
e=p->data;
s->next=p->next;
delete p;
return 1;
}