# include <stdio.h>
# include <stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, *PNODE;

typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;

void Init_stack(PSTACK pS);
void Push_stack(PSTACK pS, int val);
void Traverse_stack(PSTACK pS);
bool Empty_stack(PSTACK pS);
bool Pop_stack(PSTACK pS, int * val);
void Destory_stack(PSTACK pS);


int main(void)
{
STACK S;
int val;
Init_stack(&S);
Push_stack(&S,1);
Push_stack(&S,2);
//Pop_stack(&S, &val);
Traverse_stack(&S);
Destory_stack(&S);
if (Empty_stack(&S))
{
printf("栈空了");
}
if ( Pop_stack(&S, &val) )
{
printf("出栈成功");
}
else
{
printf("出栈失败");
}
Traverse_stack(&S);
return 0;
}

void Init_stack(PSTACK pS)
{
pS->pTop=(PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
printf("动态内存分配失败\n");
return;
}
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;
}

void Push_stack(PSTACK pS, int val)
{
PNODE pNew;
pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("动态内存分配失败!\n");
return;
}
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return;
}

void Traverse_stack(PSTACK pS)
{
PNODE p;
p=pS->pTop;
while(p != pS->pBottom)
{
printf("%d ",p->data);
p = p->pNext;
}
return;
}

bool Pop_stack(PSTACK pS, int * val)
{
if (Empty_stack(pS))
{
return false;
}
else
{
PNODE p;
p = pS->pTop;
*val = p->data;
pS->pTop = p->pNext;
free(p);
p = NULL;
}
return true;
}

void Destory_stack(PSTACK pS)
{
PNODE p, q;
p = pS->pTop;
q = NULL;
while (p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
}

bool Empty_stack(PSTACK pS)
{
if (pS->pBottom == pS->pTop)
{
return true;
}
else
{
return false;
}
}

posted @ 2013-12-28 00:44  iris.gao  阅读(94)  评论(0编辑  收藏  举报