数据结构(栈)

本文介绍链式栈的基本概念与实现细节,包括创建、入栈、出栈等核心操作,并提供示例代码。

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

     栈,也是一种表结构,特点是先进后出。实现方式也有两种:数组和链表。本文主要是复习,老鸟跳过!具体主要包括以下操作:

     Stack CreateStack(void);
     int IsEmpty(Stack s);
     //int IsFull(Stack s);//链式stack可以不断申请space
     void MakeEmpty(Stack s);
     ElementType Pop(Stack s);
     ElementType Top(Stack s);
     void Push(ElementType e,Stack s);
     void Print(Stack s);

一、创建stack
     以链式结构为例,先新建一个空的stack,也就是新建一个表头节点(好处在于插入和删除操作更方便)。示例代码如下:

// 创建stack
Stack CreateStack(void){
    Stack s;//带表头
    //s=malloc(sizeof(Stack));//error!,just allocal 4 bits for pointer
    s=malloc(sizeof(struct Node));
    if(s==NULL){
        printf("out of space!");
    }else{
        s->next=NULL;
        MakeEmpty(s);
    }
    return s;
}

二、入栈操作,对应于Push函数。主要是将元素压入栈中。示例代码如下:

//push
void Push(ElementType e,Stack s){
    ptrToNode tmp;
    tmp=malloc(sizeof(struct Node));
    if(tmp!=NULL){
        tmp->e=e;
        tmp->next = s->next;
        s->next = tmp;
    }else{
        printf("error:out of space!");
    }
}

三、出栈操作,对应于Pop函数,主要是将栈顶元素弹出。示例代码如下:

//pop
ElementType Pop(Stack s){
    ptrToNode tmp;
    ElementType e;
    if(!IsEmpty(s)){
        tmp = s->next;
        s->next=s->next->next;
        e = tmp->e;
        free(tmp);
    }else{
        printf("stack is empty!");
    }
    return e;
}

四、判断栈是否为空。也就是链表是否为空。示例代码如下:

//判断是否为空
int IsEmpty(Stack s){
    return s->next==NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值