郝斌老师-栈基础程序
#include
typedef struct Node
{
int data;
struct Node *pNext;
} NODE, *PNODE;
typedef struct Stack
{
PNODE pTop; //栈顶
PNODE pBotton; //栈底
} STACK, *PSTACK;
void init(PSTACK S);
void push(PSTACK S, int val);
void traverse(PSTACK S);
bool pop(PSTACK S, int *pVal);
bool empty(PSTACK S);
void clear(PSTACK S);
int main()
{
STACK S; // STACK 等价于 struct Stack
int val; //出栈元素
init(&S);
push(&S, 1); // 压栈
push(&S, 2);
push(&S, 3);
push(&S, 4);
push(&S, 5);
push(&S, 6);
traverse(&S);
return 0;
}
void init(PSTACK S)
{
S->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == S->pTop)
{
printf("动态内存分配失败!n");
exit(-1);
}
else
{
S->pBotton = S->pTop;
S->pBotton->pNext = NULL; //该节点指针域定义为空
}
}
void push(PSTACK S, int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = S->pTop; //新节点指针域指向旧栈顶
S->pTop = pNew; //将top指向新节点
}
void traverse(PSTACK S)
{
PNODE p = S->pTop;
while (p != S->pBotton)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("n");
}
bool pop(PSTACK S, int *pVal)
{
if (empty(S))
{
return false;
}
else
{
PNODE r = S->pTop;
*pVal = r->data;
S->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
}
bool empty(PSTACK S)
{
if (S->pBotton == S->pTop)
{
return true; //栈为空
}
else
{
return false;
}
}
void clear(PSTACK S)
{
PNODE p = S->pTop;
PNODE q = NULL; // p的下一个元素
while (p != S->pBotton)
{
q = p->pNext;
free(p);
p = q;
}
S->pTop = S->pBotton;
}