「算法精解_C语言描述」栈_栈的实现与分析

结构Stack是栈的数据结构。实现栈有很多方法, 其中一种是用链表来实现

这种方法不仅简单,而且可以使栈具有多态的特性。多态通常是面向对象语言的一种特性它允许某种类型的对象(变量)在使用时用其他类型的对象(变量)代替。这意味着,除了使用栈本身的操作,还可以使用链表中的操作,这是因为栈本身就是一种链表,它与链表具有相同的特性。因此很多时候,可以像使用链表一样使用栈。

示例1:  栈抽象数据类型的头文件
/*stack.h*/
#ifndef STACK_H
#define STACK_H

#include <stdlib.h>

#include "list.h"

/*将堆栈作为链表实现*/
typedef List Stack;

/*公用接口*/
#define stack_init list_init       /*将stack_init 定义成list_init,栈通过stack_init初始化*/
#define stack_destroy list_destroy /*将stack_destroy定义成list_destroy,栈通过stack_destroy销毁*/

int stack_push(Stack *stack,const void *data);/*栈顶压入元素*/
int stack_pop(Stack *stack,void **data);      /*栈顶弹出元素*/

#define stack_peek(stack)((stack->head) == NULL ? NULL : (stack)->head->data)/*宏,获取栈顶元素数据*/
#define stack_size list_size                                                 /*宏,获取栈的大小*/

#endif 

示例2:  栈抽象数据类型的实现

/*stack.c*/
#include <stdlib.h>

#include "list.h"
#include "stack.h"

int stack_push(Stack *stack,const void *data)
{
    /*调用list_ins_next方法来插入指向链表头部中data的元素*/
    return list_ins_next(stack,NULL,data);
}

int stack_pop(Stack *stack,void **data)
{
    /*调用list_rem_next方法来删除链表的头元素*/
    reurn list_rem_next(stack,NULL,data);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值