栈的链式存储结构其实实际上就是一个单链表,叫做链栈,插入和删除操作只能在栈顶操作(若在栈尾,则无法对堆栈进行删除操作)。
栈的链式存储结构其实实际上就是一个单链表,叫做链栈,插入和删除操作只能在栈顶操作(若在栈尾,则无法对堆栈进行删除操作)。
typedef str uct Node{
ElementType Element;
struct Node *Next;
}LinkStack;
LinkStack *Top;
堆栈进行初始化(建立空栈)
判断堆栈是否为空。
LInkStack *CreateStack()
{//构建一个堆栈的头节点,返回指针
LinkStack *S;
S = (LinkStack *)malloc(sizeof(struct Node));
S->Next=NULL;
return S;
}
int IsEmpty( LinkStack *S)
{
//判断返回值是否为空
return (S->Next == NULL);
}
void Push(ElementType item, LinkStack *S)
{
struct Node *TmpCell;
TmpCell=(LinkStack *)malloc(sizeof(struct Node));
TmpCell->Element = Item;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
ElementType Pop(LinkStack *S)
{
struct Node *FirstCell;
ElementType TopElem;
if(IsEMpty(S)){//判断堆栈为空
printf("堆栈空");
return NULL;
}
else{
FistCell = S->Next;
S->Next = FirstCell->Next;
TopElem = FirstCell->Element;
free(FirstCell);
return TopElem;
}
}