限定性线性表,将线性表的插入和删除操作限制为仅在表的一端进行。
允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。 
特点:后进先出 (LIFO)
 
//链栈定义
typedef struct node
{
    StackElementType data;
    struct node *next;
} LinkStackNode;
 
//初始化一个空的链栈
LinkStack InitStack ()
{
     LinkStack top;
     top = (LinkStack)malloc(sizeof(LinkStackNode));
     top->next=NULL;
     return top;
}
 
//判断栈是否空?空则返回1,否则返回0
int IsEmpty ( LinkStack top )
{
     return top->next ==0;
}
 
//进栈 — 将数据元素x压入栈top中
int Push (LinkStack top, StackElementType x)
{
     LinkStackNode *temp;
     temp = (LinkStackNode *)malloc(sizeof(LinkStackNode ));
     if( temp == NULL ) //申请空间失败
     return FALSE;
     temp->data=x;
     temp->next=top->next;
     top->next=temp;
     return TRUE;
}
 
//出栈,删除栈顶元素并存入x所指的存储空间
int Pop( LinkStack top, StackElementType *x )
{
    LinkStackNode *temp;
    temp = top->next;
    if( temp==NULL )//栈为空
       return FALSE;
    top->next = temp->next;
    *x=temp->data;
    free(temp);
    return TRUE;
}
 
//读栈顶元素
//栈顶元素存入x所指空间中,但未删除
int GetTop ( LinkStack top, StackElementType *x )
{
     if(top->next ==NULL) //栈空
     return FALSE;
     else{
         *x=top->next->data;
         return TRUE;
           } 
}
 
 
posted on 2020-05-14 19:25  回忆ing  阅读(116)  评论(0编辑  收藏  举报