栈
限定性线性表,将线性表的插入和删除操作限制为仅在表的一端进行。
允许插入和删除的一端称为栈顶(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;
}
}