前面我们讲了顺序栈的实现,现在我们来看链式栈的实现
#pragma once
#include<stdio.h>
#include<stddef.h>
#include<stdlib.h>
#define HEADER printf("\n============%s===========\n",__FUCTION__);
typedef char linkstacktype;
typedef struct linkstack{
linkstacktype data;
struct linkstack *next;
}linkstack;
void linkstack_init(linkstack **head);
void linkstack_push(linkstack **head,linkstacktype value);
void linkstack_pop(linkstack **head);
int linkstack_gettop(linkstack *head,linstacktype *value);
void linstack_print(linkstack *head);
linkstack *linkstack_creat(linkstacktype value);
下面我们就要来实现栈的功能
void linkstack_init(linkstack **head)
{
if(head == NULL)
{
return;
}
*head = NULL;
return;
}
linkstack *linkstack_creat(linkstacktype value)
{
linkstack newnode = (linkstack*)malloc(sizeof(linkstack));
newnode->data = value;
newnode->next = NULL;
return newnode;
}
void linkstack_push(linkstack** head,linkstacktype value)
{
if(head == NULL)
{
return;
}
linkstack *newnode = linkstack_creat(value);
newnode->next = *head;
*head = newnode;
}
void linkstack_pop(linkstack **head)
{
if(head == NULL)
{
return;
}
if(*head == NULL)
{
return;
}
linkstack *cur = *head;
*head = cur->next;
free(cur);
cur = NULL;
return;
}
int linkstack_gettop(linkstack *head,linkstacktype value)
{
if(head == NULL)
{
return 0;
}
*value = head->data;
return 1;
}
void linkstack_print(linkstack *head)
{
if(head == NULL)
{
return;
}
linkstack *cur = head;
while(cur != NULL)
{
printf("[%c] ",cur->data);
cur = cur->next;
}
printf("\n");
}
下面是测试函数以及实现效果
如有错误请指正,谢谢