1.栈的顺序存储

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int top;
}SqStack;
int Push(SqStack *s,int m);
int Pop(SqStack *s,int *e);
int main()
{
SqStack stack;
stack.top=-1;
int e;
Push(&stack,1);
Push(&stack,2);
Pop(&stack,&e);
printf("取出栈顶元素:%d\n",e);
return 0;
}

int Push(SqStack *s,int m)
{
if(s->top==MAXSIZE-1)
return FALSE;
s->top++;
s->data[s->top]=m;
return TRUE;
}
int Pop(SqStack *s,int *e)
{
if(s->top==-1)
return FALSE;
*e=s->data[s->top];
s->top--;
return TRUE;
}

 2.两栈共享空间

#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int top1;
int top2;
}SqDoubleStack;
int Push(SqDoubleStack *s,int m,int stackNumber);
int Pop(SqDoubleStack *s,int *e,int stackNumber);
int main()
{
SqDoubleStack stack;
int e;
stack.top1=-1;
stack.top2=MAXSIZE;
Push(&stack,1,1);
Push(&stack,2,1);
Push(&stack,3,2);
Push(&stack,4,1);
Pop(&stack,&e,1);
printf("取出栈1的栈顶元素:%d\n",e);
return 0;
}

int Push(SqDoubleStack *s,int m,int stackNumber)
{
if(s->top1+1==s->top2)
return FALSE;
if(stackNumber==1)
s->data[++s->top1]=m;
else if(stackNumber==2)
s->data[++s->top2]=m;
return TRUE;
}

int Pop(SqDoubleStack *s,int *e,int stackNumber)
{
if(stackNumber==1)
{
if(s->top1==-1)
return FALSE;
*e=s->data[s->top1--];
}
else if(stackNumber==2)
{
if(s->top2==MAXSIZE)
return FALSE;
*e=s->data[s->top2--];
}
return TRUE;
}

 3.栈的链式存储

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct StackNODE
{
StackNODE *next;
int data;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
int Push(LinkStack *L,int m);
int Pop(LinkStack *L,int *e);
int main()
{
LinkStack stack;
int e;
stack.top=NULL;
stack.count=0;
Push(&stack,1);
Push(&stack,2);
Pop(&stack,&e);
printf("取出栈顶元素:%d\n",e);
return 0;
}

int Push(LinkStack *L,int m)
{
StackNode *p;
p=(StackNode*)malloc(sizeof(StackNode));
p->data=m;
p->next=L->top;
L->top=p;
L->count++;
return TRUE;
}

int Pop(LinkStack *L,int *e)
{
StackNode *p;
if(!L->count)
return FALSE;
*e=L->top->data;
p=L->top;
L->top=L->top->next;
L->count--;
free(p);
return TRUE;
}

 

posted @ 2011-12-20 11:31  shiney  阅读(231)  评论(0编辑  收藏  举报