数据结构之栈(C语言实现)

好久没有写C语言了,有些生疏,现在来回味一下。

主要来实现一下动态栈

这里写图片描述

栈底空元素空用来保存栈底指针,判断栈空,假如没有该空节点,将如法判断是否为栈空。(两个栈顶和栈底都指向第一个元素)

结构体

typedef struct Node{
    int data;//数据域  
    struct Node * PNext;//指针域  
} Node, * PNext;

typedef struct Stack {
    PNext top;
    PNext bottom;
}Stack, * PStack;

附上代码

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



typedef struct Node{
    int data;
    struct Node * PNext;
} Node, * PNext;

typedef struct Stack {
    PNext top;
    PNext bottom;
}Stack, * PStack;


void  init(PStack PStack)
{
    PStack->bottom = (PNext)malloc(sizeof(Node));
    PStack->top = PStack->bottom;
    PStack->top->PNext = NULL;
}


void traverse(PStack Ps)
{
    if (Ps->bottom == Ps->top)
    {
        printf("栈为空\n");
        return;
    }
    PNext pt = Ps->top;
    while (pt != Ps->bottom)
    {
        printf("%d ", pt->data);
        pt = pt->PNext;
    }
    printf("\n");
    return;

}

void push(PStack Pstack, int val)
{
    PNext Pnew = (Node *)malloc(sizeof(Node));//生成一个新节点  
    Pnew->data = val;
    Pnew->PNext = Pstack->top;
    Pstack->top = Pnew;
}


void pop(PStack ps)
{
    if (ps->top == ps->bottom)
    {
        printf("栈为空,无法完成出栈操作\n");
        return;
    }
    PNext temp = ps->top;//引入辅助变量,用于释放内存  
    ps->top = ps->top->PNext;
    free(temp);
    temp = NULL;
}

void clear(PStack ps)
{
    while (ps->top != ps->bottom)
    {
        PNext temp = ps->top;
        ps->top = ps->top->PNext;
        free(temp);
    }
}
int main()
{
    Stack stack;
    init(&stack);
    push(&stack, 6);
    push(&stack, 7);
    push(&stack, 8);
    traverse(&stack);
    pop(&stack);
    traverse(&stack);
    clear(&stack);
    traverse(&stack);
    push(&stack, 7);
    traverse(&stack);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值