#include <STDIO.H>
typedef struct ElementT
{
int *data;
struct ElementT* next;
}Element;
int Push(Element** stack,int* data);
int Pop(Element** stack);
int CreateStack(Element** stack);
int DeleteStack(Element** stack);
int CreateStack(Element** stack)
{
*stack = NULL;
return 1;
}
/************************************************************************/
// *stack--->newElem
// | |
// | newElem->next--
// | |
// ----------------------
//Function: Push
//说明:push函数为新元素分配内存,检查内存分配操作是否失败,对新元素进行赋值
//把新元素放到堆栈的栈顶,最后对堆栈指针做出调整。
/************************************************************************//
int push(Element** stack,int* data)
{
Element* elem;
elem = (Element*)malloc(sizeof(Element));
if (!elem)
{
return 0;
}
elem->data = data;
elem->next = *stack;
*stack = elem;
return 1;
}
/************************************************************************/
//Function: Pop
//说明:Pop函数为新元素分配内存,检查内存分配操作是否失败,对新元素进行赋值
//把新元素放到堆栈的栈顶,最后对堆栈指针做出调整。
/************************************************************************//
int Pop(Element** stack,int** data)
{
Element* elem;
//判断堆栈指针是否为空
if (!(elem=*stack))
{
return 0;
}
*data = elem->data;
*stack = elem->next;
free(elem);
return 1;
}
/************************************************************************/
//Function: DeleteStack
//说明:DeleteStack函数可以用反复调用Pop函数来实现。但一边遍历堆栈数据结构
//(即构成堆栈的那个链表)一边释放各链表元素有办法将更有效率。在释放当前元素
//的时候,你需要一个临时指针来保存指向下一个元素的指针,这一点千万不要忘了
/************************************************************************//
int DeleteStack(Element** stack)
{
Element* next;
while(*stack)
{
next = *stack->next;
free(*stack);
*stack = next;
}
return 1;
}
堆栈c实现
最新推荐文章于 2024-07-23 21:59:03 发布