栈的实现

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct Node{
    int value;
    struct Node * next;
}NODE,*PNODE;

typedef struct Stack{
    PNODE top;
    PNODE bottom;
}STACK,*PSTACK; 

void init_stack(PSTACK pStack);
void push(PSTACK pStack);
void pop(PSTACK pStack);
void traverse_stack(PSTACK pStack);
bool is_empty(PSTACK pStack);
void gettop(PSTACK pStack,int *top);
void getlen_stack(PSTACK pStack,int *len);
void clean_stack(PSTACK pStack);
void destroy_stack(PSTACK pStack);

int main(void)
{
    freopen("in.txt","r",stdin);
    STACK stack;
    init_stack(&stack);
    push(&stack);
    traverse_stack(&stack);
    int top,len;
    gettop(&stack,&top);
    getlen_stack(&stack,&len);
    printf("THE TOP OF THE STACK IS %d\n",top);
    printf("THE LEN OF THE STACK IS %d\n",len);
    pop(&stack);
    gettop(&stack,&top);
    getlen_stack(&stack,&len);
    printf("THE TOP OF THE STACK IS %d\n",top);
    printf("THE LEN OF THE STACK IS %d\n",len);
    clean_stack(&stack);
    traverse_stack(&stack);
    destroy_stack(&stack);
    traverse_stack(&stack);
//  is_empty(&stack);

    return 0;
    fclose(stdin);
}

void init_stack(PSTACK pStack)
{
    pStack->top = pStack->bottom = NULL;
}

void push(PSTACK pStack)
{
    int val;
    while(scanf("%d",&val) && val!= -1){
        PNODE p = (PNODE)malloc(sizeof(Node));
        p->next = NULL;
        p->value = val;
        if(pStack->bottom==NULL&&pStack->top==NULL){
            pStack->top = pStack->bottom = p; 
        }else{
            p->next = pStack->top;
            pStack->top = p;
        }
    }
}


void traverse_stack(PSTACK pStack)
{
    PNODE p = pStack->top;
    if(false == is_empty(pStack)){
        while(p){
            printf("%d\t",p->value);
            p = p->next;
        }
        printf("\n");

    }else{
        printf("SORRY The stack is empty!\n");
    }

}

bool is_empty(PSTACK pStack)
{
    if(pStack->top == NULL && pStack->bottom == NULL){
        return true;
    }else{
        return false;
    }
}

void gettop(PSTACK pStack,int *top)
{
    if(false == is_empty(pStack)){
        *top = pStack->top->value;
    }else{
        printf("SORRY The stack is empty!\n");
    }

}

void pop(PSTACK pStack)
{
    PNODE p = pStack->top;
    pStack->top = p->next;
    free(p);
}

void getlen_stack(PSTACK pStack,int *len)
{
    PNODE p = pStack->top; 
    int cnt = 0;
    if(false == is_empty(pStack)){
        while(p){
            cnt++;
            p = p->next;
        }
        *len = cnt;
    }else{
        printf("SORRY The stack is enpty!\n");
    } 
}

void clean_stack(PSTACK pStack)
{
    PNODE p = pStack->top; 
    if(false == is_empty(pStack)){
        while(p){
            p->value = 0;
            p= p->next;
        }
    }else{
        printf("SORRY The stack is enpty!\n");
    } 
}

void destroy_stack(PSTACK pStack)
{
    PNODE p = pStack->top;
    PNODE q = NULL; 
    if(false == is_empty(pStack)){
        while(p){
            p = p->next;
            pop(pStack);
        }
        printf("%d",pStack->bottom->value); 
//      printf("%d",pStack->top->value);
    }else{
        printf("SORRY The stack is enpty!\n");
    }
}
posted @   pengwill  阅读(139)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
点击右上角即可分享
微信分享提示