#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int elemType;
typedef struct linklist
{
elemType data;
struct linklist *next;
} node, *linklist;
linklist initLinklist()
{
linklist s;
s = (linklist)malloc(sizeof(node));
s->next = NULL;
return s;
}
int PushLinkStack(linklist s, elemType e)
{
linklist new;
new = (linklist)malloc(sizeof(node));
if (!new)
{
printf("node is null\n");
return 0;
}
new->data = e;
new->next = s->next;
s->next = new;
return 1;
}
void printStack(linklist s)
{
linklist p = s->next;
if (s->next == NULL)
{
printf("stack is null\n");
}
while (p)
{
printf("%d<-", p->data);
p = p->next;
}
printf("\n");
}
void popLinkStack(linklist s)
{
linklist p;
p = s->next;
if (s->next == NULL)
{
printf("当前栈为空\n");
return;
}
else
{
s->next = p->next;
free(p);
p = NULL;
}
}
elemType getLinkTop(linklist s)
{
linklist p;
if (s->next != NULL)
{
p = s->next;
return p->data;
}
else
{
printf("stack is null\n");
}
}
void clearStack(linklist s)
{
linklist p, q;
p = s->next;
while (p)
{
q = p;
p = p->next;
free(q);
q = NULL;
}
s->next = NULL;
s->data = 0;
}
int main()
{
elemType e;
linklist s;
int topElem;
s = initLinklist();
s->data = 0; //表示栈当前长度
if (s)
{
printf("初始化成功\n");
}
printf("十次入栈\n");
for (int i = 0; i < 10; i++)
{
if (PushLinkStack(s, i + 1))
{
s->data++;
}
}
printf("当前栈长度为:%d\n", s->data);
printf("Linklist:\n");
printStack(s);
printf("取栈顶元素:%d\n", getLinkTop(s));
printf("执行四次出栈操作:\n");
for (int i = 0; i < 4; i++)
{
popLinkStack(s);
s->data--;
}
printf("当前栈长度为:%d\n", s->data);
printf("Linklist:\n");
printStack(s);
printf("取栈顶元素:%d\n", getLinkTop(s));
printf("清空栈\n");
clearStack(s);
printStack(s);
return 0;
}