栈的存储也有两种方式,顺序栈和链栈。
顺序栈:栈的存储结构是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,同时附设指针top是栈顶元素在顺序栈中的位置,栈为空时为top=-1
链式栈:通过单链表的方式实现,需要为每个栈元素分配额外的指针空间来存放指针域,有点是克服了数组实现顺序栈空间利用率不高的缺点。
顺序栈定义-----以括号匹配为例
#include <stdio.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
#define MAXZISE 100
#define ERROR false
//栈的存储方式为数组,
typedef char DataType;
typedef struct stack{
DataType data[MAXZISE];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
(*S).top = -1;
}
int IsEmptyStack(SeqStack *S)
{
if ((*S).top == -1){
return TRUE;
} else{
return FALSE;
}
}
int IsFull(SeqStack *S)
{
if((*S).top == MAXZISE-1){
return TRUE;
}else{
return FALSE;
}
}
void popStack(SeqStack *S, DataType temp)
{
if(IsEmptyStack(S)){
return;
}
temp = (*S).data[(*S).top--];
}
void pushStack(SeqStack *S, DataType temp)
{
if(IsFull(S))
return;
(*S).data[++(*S).top] = temp;
}
void getTopStack(SeqStack *S