一,单结构栈的基本操作
1:定义结构体:
typedef int Position;
typedef char NL;
typedef struct SNode* PtrToSNode;
struct SNode{//单结构栈
NL *Data;
Position Top;//顶指针
int Maxsize;//栈的最大存储
};
typedef PtrToSNode Stack;
2 创建空栈
void Creatstack(Stack S,NL Maxsize)//创建空栈 (单项)
{
S=(Stack)malloc(Maxsize*sizeof(struct SNode));
S->Data=(NL*)malloc(sizeof(NL));
S->Top=-1;
S->Maxsize=Maxsize;
}
3.进栈操作
bool IsFull(Stack S)//判断栈满
{
return (S->Top=(S->Maxsize-1));
}
bool Push(Stack S,NL X)//进栈
{
if(IsFull(S))
{
printf("栈满\n");
return false;
}
else
{
S->Data[++S->Top]=X;//进栈操作
return S;
}
}
4:出栈操作:
bool IsEmpty(Stack S)//判断栈是否为空
{
return (S->Top==-1);
}
NL Pop(Stack S)//出栈操作
{
if(IsEmpty(S))
printf("栈为空\n");
else
return (S->Data[S->Top--]);
}
栈的特点:后进先出
二:双结构栈
1:结构体:
struct SNode{//双结构栈
NL *Data;
Position Top1,Top2;
int Maxsize;
};
2:创建空栈:
Stack CreatStack( Stack S,int Maxsize)//创建空栈
{
S=(Stack)malloc(sizeof(struct SNode));//申请空间
S->Data=(NL*)malloc(Maxsize*sizeof(NL));//缺点所在,容易浪费空间
S->Top1=-1;//第一个栈指向开头
S->Top2&