Stack.h
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int SelemType;
typedef int Status;
/*01 栈的顺序存储结构*/
typedef struct Sqstack
{
SelemType data[MAXSIZE];
int top;
}sqstack;
/*02 两栈共享空间*/
typedef struct SdoubleStack
{
SelemType data[MAXSIZE];
int top1;
int top2;
}Sdstack;
/*03 栈的链式存储结构*/
typedef struct NodeStack
{
SelemType data;
struct NodeStack *next;
}Snode, *Slink;
typedef struct StackLink
{
Slink top;
int count;
}stackLink;
Stack.c
/*01 顺序栈的初始化*/
Status InitStack(sqstack *S)
{
S->top = -1;
return OK;
}
/*02 顺序栈的压栈*/
Status Push(sqstack *S, SelemType e)
{
if(S->top == MAXSIZE-1)
{
return ERROR;
}
S->top++;
S->data[S->top] = e;
return ERROR;
}
/*03 顺序栈的弹栈*/
Status Pop(sqstack *S, SelemType *e)
{
if(S->top == -1)
{
return ERROR;
}
*e = S->data[S->top];
S->top--;
return OK;
}
/*04 打印顺序栈的元素*/
void PrintStack(sqstack s)
{
while(s.top != -1)
{
printf("%d ", s.data[s.top]);
s.top--;
}
printf("\n");
}
/*01 链栈的初始化*/
Status InitStack(stackLink *S)
{
S->top = NULL;
S->count = 0;
return OK;
}
/*02 链栈的入栈*/
Status Push(stackLink *S, SelemType e)
{
Slink s = (Slink)malloc(sizeof(Snode));
if(!s)
{
return ERROR;
}
s->data = e;
s->next = S->top;
S->top = s;
S->count++;
return OK;
}
/*03 链栈的弹栈*/
Status Pop(stackLink *S, SelemType *e)
{
Slink p = NULL;
if(S->top == NULL)
{
return ERROR;
}
p = S->top;
*e = p->data;
S->top = p->next;
free(p);
S->count--;
return OK;
}
/*04 打印链栈的元素*/
void PrintStack(stackLink s)
{
while(s.top != NULL)
{
printf("%d ", s.top->data);
s.top = s.top->next;
}
printf("\n");
}
/*01 两栈共享空间 初始化*/
Status InitStack(Sdstack *S)
{
S->top1 = -1;
S->top2 = MAXSIZE;
return OK;
}
/*02 压栈*/
Status Push(Sdstack *S, SelemType e, int Stacknumber)
{
if(S->top1+1 == S->top2)
{
return ERROR;
}
if(Stacknumber == 1)
{
S->top1++;
S->data[S->top1] = e;
}
else if(Stacknumber == 2)
{
S->top2--;
S->data[S->top2] = e;
}
else;
return OK;
}
/*03 弹栈*/
Status Pop(Sdstack *S, SelemType *e, int Stacknumber)
{
if(Stacknumber == 1)
{
if(S->top1 == -1)
{
return ERROR;
}
else
{
*e = S->data[S->top1];
S->top1--;
}
}
else if(Stacknumber == 2)
{
if(S->top2 == MAXSIZE)
{
return ERROR;
}
else
{
*e = S->data[S->top2];
S->top2++;
}
}
else;
return OK;
}
/*04 打印栈中的元素*/
void PrintStack(Sdstack s, int Stacknumber)
{
if(Stacknumber == 1)
{
while(s.top1 != -1)
{
printf("%d ", s.data[s.top1]);
s.top1--;
}
printf("\n");
}
else if(Stacknumber == 2)
{
while(s.top2 != MAXSIZE)
{
printf("%d ", s.data[s.top2]);
s.top2++;
}
printf("\n");
}
else;
}