#include<stdio.h>
#include<stdlib.h>
#define true 1
#define ERROR -1
/*带头节点的链栈*/
typedef struct SNode *PtrToSNode;
struct SNode {
int Data;
PtrToSNode Next;
};
typedef PtrToSNode Stack;
Stack CreateStack()
{ /* 构建一个堆栈的头结点,返回该结点指针 */
Stack S;
S = (Stack)malloc(sizeof(struct SNode));
S->Next = NULL;
return S;
}
int IsEmpty(Stack S)
{
/* 判断堆栈S是否为空,若是返回true;否则返回false */
return (S->Next == NULL);
}
int Push(Stack S, int X)
{ /* 将元素X压入堆栈S */
PtrToSNode TmpCell;
TmpCell = (PtrToSNode)malloc(sizeof(struct SNode));
TmpCell->Data = X;
TmpCell->Next = S->Next;
S->Next = TmpCell;
return true;
}
/*只能在栈顶删除*/
int Pop(Stack S)
{ /* 删除并返回堆栈S的栈顶元素 */
PtrToSNode FirstCell;
int TopElem;
if (IsEmpty(S))
{
printf("堆栈空");
return ERROR;
}
else
{
FirstCell = S->Next;
TopElem = FirstCell->Data;
S->Next = FirstCell->Next;
free(FirstCell);
return TopElem;
}
}
int PrintStack(Stack S)
{
while (S->Next!=NULL)
{
int m = Pop(S);
printf("%d\n", m);
}
printf("输出完毕");
}
int main()
{
Stack S2 = CreateStack(6);
Push(S2, 1);
Push(S2, 2);
Push(S2, 3);
PrintStack(S2);
return 0;
}
05-17
2121
07-15
331