数据结构之链栈

来源:互联网 发布:封印者n卡优化 编辑:程序博客网 时间:2024/06/01 09:13
#include <stdio.h>#include <stdlib.h>typedef struct StackNode{    int data;    struct StackNode *next;}T_StackNode,*PT_StackNode; typedef struct LinkStack{    PT_StackNode top;    int count;}P_LinkStack,*PT_LinkStack;int InitStack(PT_LinkStack *S){    *S = (PT_LinkStack)malloc(sizeof(struct LinkStack));    (*S)->top = NULL;    (*S)->count = 0;    return 1;}int ClearStack(PT_LinkStack s){        PT_StackNode p;        while(s->top)        {            p = s->top;            s->top = s->top->next;            s->count--;            free(p);        }    return 1;}int DestroyStack(PT_LinkStack S){    ClearStack(S);    free(S);    return 1;}int StackEmpty(PT_LinkStack S){    if(S->top)/*栈存在且非空*/        return 0;    else        return 1;}int GetTop(PT_LinkStack S,int *e){    if(!S->top)return 0;    *e = S->top->data;    return 1;}int Push(PT_LinkStack S,int e){     //printf(" push begin");    PT_StackNode p = (PT_StackNode)malloc(sizeof(struct StackNode));    p->data = e;    p->next = S->top;    S->top = p;    S->count++;    //printf(" push ok");    return 1;}int Pop(PT_LinkStack S,int *e){    PT_StackNode p;    if (!GetTop(S,e))    return 0;    p = S->top;    S->top = S->top->next;    S->count--;    free(p);    return 1;}int StackLength(PT_LinkStack S){    return S->count;}int StackTraverse(PT_LinkStack S,int (* visit)(int)){    PT_StackNode p;    p = S->top;    while(p){        visit(p->data);        p = p->next;    }    printf("\n");    return 1;}int  visit(int e){    printf("%d ",e);    return 1;}int main(void){    int e,i;    PT_LinkStack s;    printf("InitStack初始化栈并将1--12压入栈\n");    if(InitStack(&s))        for(e = 1; e <= 12; e++)        {            Push(s,e);        }    printf("StackTraverse栈中元素从栈顶依次为:\n");    StackTraverse(s,visit);    Pop(s,&e);    printf("Pop弹出的元素为:%d\n",e);    Pop(s,&e);    printf("Pop又弹出的元素为:%d\n",e);    printf("Push将刚刚弹出的元素%d再次压入\n",e);    Push(s,e);    printf("StackEmpty判断栈是否为空:%d(1:是 0:不是)\n",StackEmpty(s));    GetTop(s,&e);    printf("GetTop当前栈顶元素为:%d\n",e);    printf("StackLength:当前栈长度为%d \n",StackLength(s));    ClearStack(s);    printf("ClearStack栈清空后,StackEmpty栈是否为空%d(1:是 0:不是)\n",StackEmpty(s));    DestroyStack(s);    printf("DestroyStack栈销毁");    return 0;}
0 0
原创粉丝点击