头文件linkStack.h
#ifndef _LINKSTACK_H
#define _LINKSTACK_H
#include <stdio.h>
#include <stdlib.h>
typedef int Data;
typedef struct LinkStack
{
Data data;
struct LinkStack *next;
}LinkStack,*PLinkStack;
PLinkStack linkStack_Create();//创建(head节点所指向的为栈顶top)
int linkStack_JudgeEmpty(PLinkStack head);//判空
int linkStack_Push(PLinkStack head,int val);//入栈(头插法)
Data linkStack_Pop(PLinkStack head);//出栈(头删除)
int linkStack_Clean(PLinkStack head);//清空
int linkStack_Destroy(PLinkStack *p);//摧毁
#endif
实现文件linkStack.c
#include "linkStack.h"
PLinkStack linkStack_Create()//创建(head节点所指向的为栈顶top)
{
PLinkStack head = (PLinkStack)malloc(sizeof(LinkStack));
if(head==NULL)
{
perror("Create fail");
return -1;
}
head->next=NULL;
return -1;
}
int linkStack_JudgeEmpty(PLinkStack head)//判空
{
if(head==NULL)
{
perror("LinkStack is NULL");
return -1;
}
if(head->next==NULL)
{
return 1;
}
else
{
return 0;
}
}
int linkStack_Push(PLinkStack head,int val)//入栈(头插法)
{
if(head==NULL)
{
perror("LinkStack is NULL");
return -1;
}
PLinkStack newNode = (PLinkStack)malloc(sizeof(LinkStack));
newNode->data=val;
newNode->next=head->next;
head->next=newNode;
return 1;
}
Data linkStack_Pop(PLinkStack head)//出栈(头删除)
{
if(head==NULL)
{
perror("LinkStack is NULL");
return -1;
}
if(linkStack_JudgeEmpty(head)==1)
{
perror("LinkStack is Empty");
return -1;
}
PLinkStack q = head->next;
head->next = head->next->next;
free(q);
return 1;
}
int linkStack_Clean(PLinkStack head)//清空
{
if(head==NULL)
{
perror("LinkStack is NULL");
return -1;
}
while(head->next!=NULL)
{
linkStack_Pop(head);
}
return 1;
}
int linkStack_Destroy(PLinkStack *p)//摧毁
{
if(linkStack_JudgeEmpty(*p)==0)
{
linkStack_Clean(*p);
}
free(*p);
*p=NULL;
return 1;
}
若有错误欢迎指正(*^▽^*)