顺序栈的实现
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#define INITSIZE 10
#define INCREMENT 10
typedef struct SStack
{
int* data;
int cursize;
int top;
}SStack,*Stack;
void InitStack(Stack ST)
{
malloc(sizeof(int)*INITSIZE);
ST->cursize=INITSIZE;
ST->top=-1;
}
int GetTop(Stack ST)
{
if(ST->top==-1)
{
return -1;
}
return ST->data[ST->top];
}
void Push(Stack ST,int value)
{
if(ST->top+1==ST->cursize)
{
ST->data=(int*)realloc(ST->data,sizeof(int)*(ST->cursize+INCREMENT));
if(ST->data==NULL)
{
printf("OverFlow/n");
exit(0);
}
ST->cursize+=INCREMENT;
}
ST->top++;
ST->data[ST->top]=value;
}
int Pop(Stack ST)
{
if(ST->top==-1)
{
return -1;
}
return ST->data[ST->top--];
}
void Print(Stack ST)
{
int i;
for(i=0;i<=ST->top;i++)
{
printf("%d/t",ST->data[i]);
}
printf("/n");
}
int main()
{
Stack st;
int i;
st=(Stack)malloc(sizeof(SStack));
InitStack(st);
for(i=0;i<18;i++)
{
Push(st,i+56);
}
Print(st);
for(i=0;i<13;i++)
{
Pop(st);
}
Print(st);
printf("Hello, world/n");
getch();
return 0;
}
链表栈实现
#include <stdio.h>
#include <stdlib.h>
typedef struct LSNode
{
int data;
struct LSNode* next;
}LSNode,*SNode;
typedef struct LSk
{
SNode top;
}LSk,*LStack;
void InitLStack(LStack LS)
{
if(LS==NULL)
{
LS=(LStack)malloc(sizeof(LSk));
}
LS->top=NULL;
}
int Peek(LStack LS)
{
return LS->top->data;
}
void Push(LStack LS,int value)
{
SNode p;
p=(SNode)malloc(sizeof(LSNode));
p->data=value;
p->next=LS->top;
LS->top=p;
}
int Pop(LStack LS)
{
SNode p;
int res;
p=LS->top;
if(p==NULL)
return -1;
res=p->data;
LS->top=p->next;
free(p);
return res;
}
int main()
{
LStack ls;
int i,res;
ls=(LStack)malloc(sizeof(LSk));
InitLStack(ls);
for(i=0;i<20;i++)
{
Push(ls,i*2+3);
printf("%d/t",i*2+3);
}
printf("/n/n");
for(i=0;i<21;i++)
{
res=Pop(ls);
printf("%d/t",res);
}
printf("/n");
printf("Hello, world/n");
getch();
return 0;
}