头文件
#ifndef _LINKSTACK_H_
#define _LINKSTACH_H_
#define SUCCESS 10000
#define FAILURE 10001
typedef int ElemType;
struct node
{
ElemType data;
struct node *next;
};
typedef struct node Node;
typedef Node *LinkNode;
struct stack
{
LinkNode top;
int count;
};
typedef struct stack Stack;
#endif
接口函数
#include <stdio.h>
#include "LinkStack.h"
#include <stdlib.h>
int StackInit(Stack **S)
{
(*S) = (Stack *)malloc(sizeof(Node));
if(NULL == (*S))
{
return FAILURE;
}
(*S)->top = NULL;
(*S)->count = 0;
return SUCCESS;
}
int PUSH(Stack *S,ElemType e)
{
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
return FAILURE;
}
p->data = e;
p->next = S->top;
S->top = p;
S->count++;
return SUCCESS;
}
int StackLength(Stack *S)
{
return (S->count);
}
int GetTop(Stack *S,ElemType *e)
{
if(NULL == S->top)
{
return FAILURE;
}
*e = S->top->data;
return SUCCESS;
}
int Pop(Stack *S,ElemType *e)
{
if(NULL == S->top)
{
return FAILURE;
}
LinkNode p = S->top;
S->top = p->next;
*e = p->data;
free(p);
S->count++;
return SUCCESS;
}
int Clear(Stack *S)
{
LinkNode p;
while(S->top)
{
p=S->top;
S->top=p->next;
free(p);
S->count--;
}
}
int Destroy(Stack **S)
{
if(NULL==(*S))
{
return FAILURE;
}
free(*S);
*S=NULL;
return SUCCESS;
}
主函数
#include<stdio.h>
#include"LinkStack.h"
int main()
{
int ret,i;
Stack *s;
ElemType e;
ret=StackInit(&s);
if (FAILURE == ret)
{
printf("Init Failure!\n");
}
else
{
printf("Init Success!\n");
}
for(i=0;i<5;i++)
{
e=i+1;
ret = PUSH(s,e);
if(FAILURE == ret)
{
printf("Push Failure!\n");
}
else
{
printf("Push %d Success !\n",e);
}
}
printf("Length is %d\n",StackLength(s));
ret=GetTop(s,&e);
if(FAILURE == ret)
{
printf("Get Failure!\n");
}
else
{
printf("Get %d Success!\n",e);
}
for(i=0;i<2;i++)
{
ret = Pop(s,&e);
if(FAILURE ==ret)
{
printf("Pop Failure!\n");
}
else
{
printf("Pop %d Success!\n",e);
}
}
ret=Clear(s);
if(FAILURE==ret)
{
printf("Clear Failure!\n");
}
else
{
printf("Clear Success!\n");
}
ret = Destroy(&s);
if(FAILURE==ret)
{
printf("Destroy Failure!\n");
}
else
{
printf("Destroy Success!\n");
}