堆栈
顺序存储
#define maxsize 10;
typedef int elemtype;
struct stack{
elemtype num[maxsize];
int top;
};
1.判断堆栈是否为空
int emptyst(struct stack S)
{
return(S.top == -1);
}
2.判断堆栈是否已满的函数
int fullst(struct stack S)
{
if (S.top==maxsize)
return (1);
else
return(0);
}
3.元素入栈
void pushst(struct stack S,elemtype k)
{
if (fullst(s))
printf("overflow")
;else
{
S.top++;
S.num[S.top]=k;
}
}
4.元素出栈
elemtype pop(struct stack S)
{
elemtype temp;
if(emptyst(S))
printf("underflow");
else
{
temp=S.num[S.top];
S.top--;
return (temp);
}
}
链式存储
typedef int elemtype;
struct snode
{
elemtype data;
struct snode *next;
}s;
1.初始化链式栈
void initstl(struct snode *s)
{
s->next=NULL;
}
2.链式栈的压入算法
void pushls(struct snode *s,elemtype k)
{
struct snode *q;
q= (struct snode *)malloc (sizeof (struct snode));
q->data=k;
q->next=s->next;
s->next=q;
}
3.链式栈的元素弹出
elemtype popls(struct snode *s)
{
elemtype x;
struct snode *q;
if(s->next==NULL)
printf("underflow")
else {
q=s->next;
s->next=q->next;
x=q->data;
ferr(q);
return(x);
}
}