链栈的基本操作

本文介绍了一种使用链表实现的栈数据结构,并提供了详细的C语言代码示例。该实现包括初始化、压栈、遍历、弹栈、判断是否为空及清空栈等操作。通过具体实例演示了栈的基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

typedef int ElemType;

typedef struct node
{
    ElemType data;
    struct node * pnext;
}Node;

typedef struct stack
{
    Node *top;
    Node *bottom;
}Stack;

void init(Stack *S);
void push(Stack *S,ElemType value);
void traverse(Stack *S);
bool pop(Stack *S,ElemType *value);
bool empty(Stack *S);
void clear(Stack *S);

int main()
{
    Stack S;
    ElemType value;
    init(&S);
    push(&S,1);
    push(&S,2);
    push(&S,3);
    push(&S,4);
    traverse(&S);

    pop(&S,&value);
    printf("%d\n",value);

    traverse(&S);
    clear(&S);
    return 0;
}

void init(Stack *S)
{
    S->top = (Node*)malloc(sizeof(Node));
    S->bottom = S->top;
    S->bottom->pnext = NULL;
}

void push(Stack *S,ElemType value)
{
    Node *p = (Node*)malloc(sizeof(Node));
    p->data = value;
    p->pnext = S->top;
    S->top = p;
}

void traverse(Stack *S)
{
    Node *p = S->top;
    while(p!=S->bottom)
    {
        printf("%d ",p->data);
        p = p->pnext;
    }
    printf("\n");
}

bool empty(Stack *S)
{
    return (S->top == S->bottom);
}

bool pop(Stack *S,ElemType *value)
{
    if(empty(S))
    {
        return false;
    }
    else
    {
        Node *p = S->top;
        *value = p->data;
        S->top = S->top->pnext;
        free(p);
        return true;
    }
}

void clear(Stack *S)
{
    if(empty(S))
        return;
    else
    {
        Node *p = S->top;
        while(p != S->bottom)
        {
            S->top = S->top->pnext;
            free(p);
            p = S->top;
        }
        printf("finish clear\n");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值