1.链式栈的节点
2.链式栈的描述
typedef int datatype;
typedef struct node
{
datatype data;
struct node* next;
}listnode,*linklist;
3.创建空栈
linklist linkstack_create()//创建空栈
{
linklist * s;
if((s = (linklist *)malloc(sizeof(linklist))) == NULL)
{
printf("malloc failed\n");
return NULL;
}
s->next = NULL;
return s;
}
4.判断是否为空栈
int linkstack_empty(linklist s)
{
return (s->next == NULL?1:0);
}
5.元素进栈
int linkstack_push(linklist s)//元素进栈
{
linklist * p;
if((p = (linklist *)malloc(sizeof(linklist))) == NULL)
{
printf("malloc failed\n");
return -1;
}
p->data = value;
p->next = s->next;
s->next = p;
return 0;
}
6.元素出栈
datatype linkstack_pop(linklist s)//元素出栈
{
linklist p;
datatype ret;
p = s->next;
s->next = p->next;
ret = p->data;
free(p);
p = NULL;
return ret;
}
7.取栈顶元素
datatype linkstack_top(linklist s)//取栈顶元素
{
return (s->next->data);
}
8.链式栈的清空
原理类似于上面的元素出栈,一个一个的出栈,再把空间清除掉。
void linkstack clear(linklist s) //清除
{
linklist p;
printf("clean");
p = s->next;
while (p){
s->next = p->next;
printf("%d",p->data);
free(p);
p = s->next;
}
puts("");
}
9.释放内存
类似于单链表的遍历(从头到尾的遍历),每遍历一个结点就free(),直到P==NULL。
void linkstack free(linklist s) //释放内存
{
linklist p;
printf("free");
p = s;
while (p){
s = s->next;
printf("%d",p->data);
free(p);
p = s;
}
puts("");
}