1.构造结构体作为链表的节点
typedef struct Node{
int Date;
struct Node *Next;
} LinkStack;
2.建栈操作
为指针S分配一块空间,返回后作为链表的头节点。其后继为空,表示栈为空。向栈中压入元素后,它的直接后继就是栈顶元素。
LinkStack *CreateStack()
{
LinkStack *S;
S = malloc(sizeof(struct Node));
S->Next = NULL;
return S;
}
3.判断栈是否为空
int IsEmpty(LinkStack *S)
{
return(S->Next == NULL);
}
4.进栈操作
因为是链式存储,所以不须要检查栈是否已满。直接将新节点以首插法的方式插入链表头部即完成进栈操作。
void Push(LinkStack *S, int item)
{
LinkStack *TmpCell;
TmpCell = (LinkStack*)malloc(sizeof(struct Node));
TmpCell->Date = item;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
5.出栈操作
出栈前首先检查栈是否已空。
int Pop(LinkStack *S)
{
LinkStack *FirstCell;
int TopElem;
if(IsEmpty(S)){
printf("栈已空");
return NULL;
}
else{
FirstCell = S->Next;
S->Next = FirstCell->Next;
TopElem = FirstCell->Date;
free(FirstCell);
return TopElem;
}
}