stack.h
#ifndef _STACK_H
#define _STACK_H
typedef int Stack_Type;
typedef int Status;
#define OK 1;
#define ERROR 0
//定义一个结构以存储堆栈元素,其中link字段将指向堆栈的下一个元素
typedef struct satck_node
{
Stack_Type value;
struct satck_node *next;
}STACK_NODE;
//函数声明
Status InitStack(STACK_NODE **head);
Status push(STACK_NODE **head, Stack_Type value);
Status pop(STACK_NODE **head, Stack_Type *value);
Status empty(STACK_NODE *head);
#endif
main.cpp
#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h>
int main(void)
{
int i, j;
int pop_value;
STACK_NODE *head = NULL;
i = InitStack(&head);
if (i)
{
puts("初始化成功");
}
else
{
puts("初始化失败");
}
//测试push函数
for(j = 1; j < 6; j++)
{
push(&head, j);
}
//测试pop函数
j = pop(&head, &pop_value);
if (j)
{
printf("栈中弹出的元素值是:%d\n", pop_value);
}
return 0;
}
//初始化
Status InitStack(STACK_NODE **head)
{
*head = (STACK_NODE *) malloc(sizeof(STACK_NODE));
assert((*head) != NULL);
(*head)->next = NULL;
return OK;
}
//入栈
Status push(STACK_NODE **head, Stack_Type value)
{
STACK_NODE *p = NULL;
p = (STACK_NODE *) malloc(sizeof(STACK_NODE));
assert(p != NULL);
p->value = value;
p->next = *head;
*head = p;
return OK;
}
//出栈
Status pop(STACK_NODE **head, Stack_Type *value)
{
//如果栈为空,则返回
if (empty(*head))
{
return ERROR;
}
STACK_NODE *p = NULL;
p = (*head)->next;
*value = (*head)->value;
free(*head);
*head = p;
return OK;
}
Status empty(STACK_NODE *head)
{
if (NULL == head->next)
{
return OK;
}
else
{
return ERROR;
}
}