栈
栈(stack)是限定仅在表尾进行插入或者删除的线性表,表尾端称为栈顶(top),表头端称为栈底(bottom)。栈有时又叫做先进后出的线性表,栈的基本操作有进栈(push)和出栈(pop),前者相当于插入,而后者则是删除最后插入的元素。如图
栈有两种存储方法:一种使用数组,另一种是使用单链表。
栈的顺序表示
typedef struct stack
{
int top;
int data[MAXSIZE];
}stack;
顺序栈的进栈出栈
void push(stack *s,int e)
{
if(s->top==MAXSIZE-1)
return ;
s->top++;
s->data[s->top]=e;
return ;
}
void pop(stack *s,int *e)
{
if((s->top)==-1)
return;
*e = s->data[s->top];
s->top--;
return;
}
栈的单链表实现
链栈是没有附加头结点的运算受限的单链表,栈顶指针就是链表的头指针。
链栈的实现为
typedef struct stackNode
{
int data;
struct stackNode *next;
}stackNode, *stackList;
void push(stackList s,int e)
{
stackList tmp;
tmp =(stackList)malloc(sizeof(stackNode));
if(tmp==NULL)
printf("Out of space");
else
{
tmp->data =e;
tmp->next=s->next;
s->next=tmp;
}
return ;
}
void pop(stackList s)
{
stackList tmp;
if(s->next==NULL)
return;
else
{
tmp=s->next;
s->next=s->next->next;
free(tmp);
}
}