链栈实现
ElementType.h 元素类型定义
#ifndef ELEMENT_H_INCLUDED
#define ELEMENT_H_INCLUDED
#define MAX_SIZE 100
#define true 1
#define false 0
typedef struct{
int id;
char * name;
}ElementType;
#endif
LinkedStack.h 顺序栈头文件(包含栈数据结构、函数方法声明)
#ifndef LINKEDSTACK_H_INCLUDED
#define LINKEDSTACK_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include "Element.h"
typedef struct StackNode{
ElementType data;
struct StackNode* next;
}StackNode;
typedef struct LinkedStack{
StackNode* top;
int length;
}LinkedStack;
void InitLinkedStack(LinkedStack* linkedstack);
int PushLinkedStack(LinkedStack* linkedstack,ElementType element);
int PopLinkedStack(LinkedStack* linkedstack,ElementType *element);
void ClearLinkedStack(LinkedStack* linkedstack);
void DestroyLinkedStack(LinkedStack* linkedstack);
#endif
SeqStack.c 顺序栈实现文件(包含栈函数方法实现)
#include "LinkedStack.h"
void InitLinkedStack(LinkedStack* linkedstack)
{
linkedstack->top = NULL;
linkedstack->length = 0;
}
int PushLinkedStack(LinkedStack* linkedstack,ElementType element)
{
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = element;
newNode->next = linkedstack->top;
linkedstack->top = newNode;
linkedstack->length++;
return true;
}
int PopLinkedStack(LinkedStack* linkedstack,ElementType *element)
{
if(linkedstack->top == NULL){
printf("空栈\n");
return false;
}
*element = linkedstack->top->data;
StackNode* tempNode = linkedstack->top;
linkedstack->top = linkedstack->top->next;
free(tempNode);
linkedstack->length--;
return true;
}
void ClearLinkedStack(LinkedStack* linkedstack)
{
StackNode* tempNode;
while(linkedstack->top){
tempNode = linkedstack->top;
linkedstack->top = linkedstack->top->next;
free(tempNode);
linkedstack->length--;
}
}
void DestroyLinkedStack(LinkedStack* linkedstack)
{
ClearLinkedStack(linkedstack);
free(linkedstack);
linkedstack = NULL;
}