链式栈

//链式栈 
#include
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
using namespace std;
typedef struct SNode
{
    SElemType data;
    struct SNode *next;
}SNode, *LinkStackPtr;

typedef struct LinkStack
{
    LinkStackPtr top;
    int count;
}*PLinkStack;

Status InitStack(PLinkStack &S)
{//初始化栈
    S=(PLinkStack)malloc(sizeof(struct LinkStack));
    (S)->top=NULL;
    (S)->count=0;
    return OK;
}

Status ClearStack(PLinkStack &S)
{//清空栈
    LinkStackPtr p;
    while(S->top){
        p=S->top;
        S->top=S->top->next;
        S->count--;
        free(p);
    }
    return OK;
}

Status DestroyStack(PLinkStack &S)
{//销毁栈
    ClearStack(S);
    free(S);
    return OK;
}

Status StackEmpty(PLinkStack S)
{//判空 
    if(S->top)
        return FALSE;
    else
        return TRUE;
}

Status GetTop(PLinkStack S,SElemType &e)
{//取栈顶元素 
    if(!S->top)
	return ERROR;
    e=S->top->data;
    return OK;
}

Status Push(PLinkStack &S,SElemType e)
{//入栈 
    LinkStackPtr p=(LinkStackPtr)malloc(sizeof(struct SNode));
    p->data=e;
    p->next=S->top;
    S->top=p;
    S->count++;
    return OK;
}

Status Pop(PLinkStack &S,SElemType &e)
{//出栈 
    LinkStackPtr p;
    if(!GetTop(S,e))
	return ERROR;
    p=S->top;
    S->top=S->top->next;
    S->count--;
    free(p);
    return OK;
}

int StackLength(PLinkStack S)
{//返回栈长 
    return S->count;
}

Status StackTraverse(PLinkStack S,Status (*visit)(SElemType))
{//遍历栈
    LinkStackPtr p;
    p=S->top;
    while(p){
        visit(p->data);
        p=p->next;
    }
    cout<

你可能感兴趣的:(数据结构)