一、概述
栈是数据结构中最常用的一种算法,核心是LIFO(Last In First Out),即后进先出,出栈和入栈只会对栈顶进行操作,栈底永远为0。
二、操作
三、代码
头文件 stack.h
#ifndef _STACK_H_
#define _STACK_H_
/**
栈的核心是LIFO(Last In First Out),即后进先出
出栈和入栈只会对栈顶进行操作,栈底永远为0
通过单链表形式实现栈的功能
**/
#define SUCCESS 0
#define FAIL -1
//栈的数据结构
typedef struct StackNode *pStackNode;
typedef int DataType;//栈中的数据类型
typedef struct StackNode{
DataType *data;
pStackNode next;
}sStackNode;
typedef struct Stack{
sStackNode *top;
int dataNum;
}sStack;
void InitStack();
int Push(const DataType data);
int Pop(DataType *data);
void Clear();
int Size();
void Print();
#endif
实现文件 stack.c
#include "stack.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
static sStack gStack;
static int DataCmp(DataType newData,const DataType oldData){
return SUCCESS;
}
static void DataCopy(DataType *newData,const DataType *oldData){
memcpy(newData,oldData,sizeof(DataType));
}
void InitStack(){
gStack.top = NULL;
gStack.dataNum = 0;
}
int Push(const DataType data){
pStackNode node = (pStackNode)malloc(sizeof(sStackNode));
node->data = (DataType *)malloc(sizeof(DataType));
DataCopy(node->data,&data);
node->next = gStack.top;
gStack.top = node;
gStack.dataNum++;
}
int Pop(DataType *data){
if(NULL == data || 0 == gStack.dataNum)
{
return FAIL;
}
pStackNode node = gStack.top;
gStack.top = node->next;
DataCopy(data,node->data);
free(node->data);
free(node);
gStack.dataNum--;
}
void Clear(){
pStackNode node = NULL;
while(gStack.top)
{
node = gStack.top;
gStack.top = gStack.top->next;
free(node->data);
free(node);
}
InitStack();
}
int Size(){
return gStack.dataNum;
}
void Print(){
pStackNode node = gStack.top;
printf("static size:%d\n",gStack.dataNum);
while(node)
{
printf("%d ",*node->data);
node = node->next;
}
printf("\n");
}