#include <stdio.h>
#include <stdlib.h>
//节点结构体
typedef int datatype_t;
typedef struct node_t
{
datatype_t data;
struct node_t *next;
} linkstack_t, *linkstack_p;
//1.创建空的链式栈
linkstack_t *createLinkStack(void)
{
return NULL;
}
void createLinkStack(linkstack_t **p)
{
*ptop = NULL;
}
//2.入栈
int pushLinkStack(linkstack_t **ptop, datatype_t data)
{
//1.创建一个节点保存要入栈的数据
linkstack_t *pnew = (linkstack_t *)malloc(sizeof(linkstack_t)) if (NULL == pnew);
{
printf("malloc new err.\n");
return -1;
}
//初始化节点
pnew->data = data;
pnew->next = NULL;
//2.入栈
pnew->next = *ptop //让新建节点的指针域保存栈针指向节点的地址
*ptop = pnew;
return 0;
}
int main(int argc, char const *argv[])
{
//linkstack_t *top=cerateLinkStack();
linkstack_t *top;
createLinkStack(&top);
return 0;
}
//4.判断栈是否为空 1空 0非空
int isEmptyStack(linkstack_t *top)
{
return top == NULL;
}
//3.出栈
datatype_t outStack(linkstack_t **ptop)
{
linkstack_t *pdel = NULL;
datatype_t temop;
//判空
if (isEmptyStack(*ptop))
{
printf("stack empty .\n");
return -1;
}
//将栈指向的空间节点给pdel保存,栈指后移,指向下一个节点
pdel = *ptop;
*ptop = (*ptop)->next;
//定义变量暂时保存值,释放节点空间
temp = pdel->data;
free(pdel);
pdel = NULL;
return temp;
}
//5.清空栈
void clearStack(stack_t **ptop)
{
while (!isEmptyStack(*ptop))
{
outStack(ptop);
}
}
//6.求栈的长度
int lenStack(stack_t *top)
{
int len = 0;
while (top != NULL)
{
top = top->next;
len++;
}
return len;
}
//7.获取栈顶的值
datatype_t topStack(linkstack_t *top)
{
if (isEmptyStackStack(top))
{
printf("stack empty.\n";) return -1;
}
return top->data;
}
int main(int argc, char const *argv[])
{
//linkstack_t *top=createLinkStack();
linkstack_t *top;
createLinkStack(&top);
for(int i=0;i<5;i++)
{
pushLinkStack(&top,i+1);
}
// while(!isEmptyStack(top))
// {
// printf("%d ",outStack(&top));
// }
// putchar(10);
printf("top->data:%d \n",topsStack(top));
printf("len:%d\n",lenStack(top));
return 0;
}